代码:
#include <stdio.h>
#include <math.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
__int64 n;
scanf("%I64d",&n);
double x=n*log10(n*1.0);
x-=(__int64)x;
__int64 a=pow(10.0, x);
printf("%I64d\n",a);
}
}
return 0;
}
要点:这道题的输入数据最大为1000000000,而且是求n^n,所以任何数据都不能用来存放n^n的结果,
考虑到用科学技术法表示一个数,可有以下推导:
x=n^n=a*10^m;// 要求x的最大位数,即求a的第一位数字;
lg(x)=n*lg(n)=m+lg(a);// 取对数,0<a<10,0<lg(a)<1,对n*lg(n)取整可得到m;
lg(a)=lg(x)-m;
a=pow(10,n*1g(n)-m);
最后取a整数部分即可。