1. 程式人生 > >陜西師範大學第七屆程序設計競賽網絡同步賽 F WWX的禮物【數學/k進制下x^n的位數/log】

陜西師範大學第七屆程序設計競賽網絡同步賽 F WWX的禮物【數學/k進制下x^n的位數/log】

操作 使用 margin TP 想要 -- ble dji 禮物

鏈接:https://www.nowcoder.com/acm/contest/121/F
來源:牛客網

題目描述

WWX的女朋友送給了他一個禮物,可是禮物卻被一把K進制密碼鎖鎖住了。在禮物盒上還有一張出自她的女朋友的紙條:”嘿嘿~~密碼我會在520那天告訴你”。但是WWX想提前知道禮物是什麽,所以找到了這把鎖的制造者Ddjing。Ddjing告訴他,我只知道這把鎖的加密原理:在鎖的表面會定期顯示兩個十進制數x和n,如果你能在有限時間算出來將n個x相乘的結果,其用k進制表示時的長度就是這把鎖的密碼。於是他又找到了號稱“人體計算機”的黑貓,黑貓在鍵盤上瘋狂操作了一波後,告訴他這道題可能要對double取整,想要知道具體方法,就要和他進行py交易,為了保住WWX的清白,你能幫幫他麽?

輸入描述:

第一行是一個整數T(1<=T<=500),表示有T組數據.
接下來的T行,每行依次輸入三個十進制整數
x(2<=x<=1e+3),n(2<=n<=1e+3),k(2<=k<=30),以空格間隔。

輸出描述:

對於每組輸入數據,首先輸出一個"Case ",然後依次輸出它的組號、”: ”和禮物盒的密碼。
每個”Case”和每個”:”後均有一個空格。
示例1

輸入

3
8 635 2
2 100 3
10 1000 10

輸出

Case 1: 1906
Case 2: 64
Case 3: 1001
示例2

輸入

1
1000 1000 2

輸出

Case 1: 9966

備註:

1.
在對一個double型的浮點數進行向下取整時,可使用如下操作。
const double EPS = 1e-8;
double a=1234.56;
int x=long int(a+EPS);

【分析】:

10進制數字x的位數:(int)(log10(x))+1

k進制數字x的位數:(int)(logk(x)) +1

k進制數字x^n的位數:(int)(logk(x^n)) +1 = (int) ( n * logk(x) + 1 ) = (int) (n * log10(x) / log10(k) ) + 1

用到了log的一些性質和換底公式。

【代碼】:

#include <bits/stdc++.h>
using namespace std;

#define EPS 1e-8
int main()
{
    int t,x,n,k,ca=1;
    cin>>t;
    while(t--)
    {
        cin>>x>>n>>k;
        int ans = (int) (n*log10(x)/log10(k) + EPS);
        printf("Case %d: %d\n",ca++,ans+1);
    }
    return 0;
}

陜西師範大學第七屆程序設計競賽網絡同步賽 F WWX的禮物【數學/k進制下x^n的位數/log】