T^T(2)(18.11.26)
阿新 • • 發佈:2018-11-28
T^T(2)
Description
TT這個很像一個流淚的表情是不是!其實,它是T的T次方啦~。當T比較大的時候TT會非常大,現在只要你求這個數一共有多少位就可以了。
Input
輸入包括多組測試資料,每個測試資料只有一個數字T(0<T<2^31)。
Output
請輸出T^T的一共有多少位數。
Sample Input 1
3
5
Sample Output 1
2
4
這一題先想到的是求一個數的位數可以對這個數取以十為底的對數,取整後再加上1即可
記得之前做過一道求n!的位數的題,那一題是把n!寫成了123*……*n,由對數運算公式把乘積轉化成加法運算。
這一題最開始的思路也是打算這麼做,所以就寫了一個快速冪的模板,然後稍微進行了一下修改。
下面把程式碼貼出來大家可以看一下:
#include<stdio.h> #include<math.h> int main() { double a,t; long long n; while(scanf("%dll",&n)!=EOF) { a=1; //賦值為1最後可以不用加 t=n; while(n!=0) { if(n&1==1) a+=log10(t); //這裡進行了修改 t*=t; n>>=1; } printf("%lld\n",(long long)(a)); } return 0; }
注意:在儲存對數運算結果的時候要用浮點型別儲存
但這麼做當我輸入到256的時候會打印出來特別奇怪的數,不知道是超範圍了還是什麼,所以就不用這個思路了。
至於這個方法到底為什麼錯希望大佬能給指出來。
然後發現其實還有這麼一個公式:log(10)(x^x)=xlog(10)x
就直接進行計算就可以了。
下面貼程式碼:
#include<stdio.h> #include<math.h> int main() { double a,t; long long n; while(scanf("%lld",&n)!=EOF) { a=n*log10(n); printf("%lld\n",(long long)(a+1)); } return 0; }