內容
複習考要到了 我們來複習複習這次的數學複習考
你要做的事情很簡單 只要輸出這個數是幾位數就可以了!
輸入說明
輸入a,b兩個數 the range is : $0<=a,b<2^{32}-1$
輸出說明
然後告訴我a的b次方($a^b$)是幾位數(有多筆測資)
範例輸入
2 8000
範例輸出
2409
程式
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long a,b;
while(cin>>a>>b){
double x = log10(a)*b;
if(a == 0) cout<<"0\n";
else if(b == 0) cout<<"1\n";
else cout<<int(x)+1<<"\n";
}
return 0;
}
說明
這題我其實前年就做了,但是沒過🥲,最近又再把它挖出來寫。
從題目可以看到a和b的範圍這麼大,所以當然不可能直接把a的b次方直接算出來,然後再看它有幾位數,unsigned long long的範圍都不夠用啊!
所以就要從log下手,高中數學有好好學的同學應該都知道,$2\fallingdotseq10^{0.301}$,$\log_{10}{2}\fallingdotseq0.301$
如果a=0那當然就是要輸出0,還有b=0就要輸出1,因為$a^0=1$,剩下的就是輸出整數x+1,因為假設$10^{2.01}$,可以分解成$10^2\times10^{0.1},1<10^{0.1}<10$。
我的天,我一開始怎麼會把它寫的那麼複雜😱
0 Comments
張貼留言