內容 

複習考要到了 我們來複習複習這次的數學複習考

你要做的事情很簡單 只要輸出這個數是幾位數就可以了!


輸入說明

輸入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$。

我的天,我一開始怎麼會把它寫的那麼複雜😱