陜西師範大學第七屆程序設計競賽網絡同步賽 F WWX的禮物【數學/k進制下x^n的位數/log】
阿新 • • 發佈:2018-05-14
操作 使用 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 ",然後依次輸出它的組號、”: ”和禮物盒的密碼。示例1
每個”Case”和每個”:”後均有一個空格。
輸入
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】