#include <stdio.h>
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int n; scanf("%d",&n);
while(n--)
{
__int64 m; scanf("%I64d",&m);
double a;
a=m*log10((double)m)-( __int64)(m*log10((double)m));
a=pow(10.0,a);
printf("%d\n",(int)a);
}
return 0;
}
这道题就是一个数学的小技巧,还是用到对数。
因为10^x=10^(n*log10(n))。
所以x=n*log10(n);
但是这道题是用到小数部分,所以就是用x-(__int64)x即可。
然后只要对x做一下pow()函数就得到结果了。
整体代码就是一个数学的理念。比二进制法和小数乘法简单多了。