hdu 1060 要求 N^N的最高位数字
要求 N^N的最高位数字
设 M = N^N
log10(M) = N * log10(N)
M = 10^(N * log10(N))
求的是最高位10^T 当T是整数时他的第一个digit总是1,所以它就应该由小数部分决定.
因此,把N * log10(N))的小数部分取出来就可以了
设 R = N * log10(N)
那么,R的小数部分为 R - (int) (R)
这样结果就是 10^(R - (int)R) ,即 (int) pow(10.0,R-(int)R);
用int可能会越界,要用__int64
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <iostream> 5 using namespace std; 6 int main() 7 { 8 __int64 cas,b,i,d; 9 double a,n,c; 10 scanf("%I64d",&cas); 11 for(i=1;i<=cas;i++) 12 { 13 scanf("%lf",&n); 14 a=n*log10(n); 15 b=(__int64)(a); 16 c=a-b; 17 d=(__int64)(pow(10,c)); 18 printf("%I64d\n",d); 19 } 20 return 0; 21 }