来源:http://acm.hdu.edu.cn/showproblem.php?pid=1060
求N^N的首位数值,首先我们应该明确,直接计算是不可能的,数太大太大了,
N^N的意思是N个N相乘,我们可以想到可以利用取对数(log10),将相乘变为相加。
最后只需要得到对10取对数所得的指数值的小数部分sum,10^sum的整数部分就为N^N的首位数值。
注:scanf()对应输出一定要符合对应的格式,之前输出long long,直接用的%ld输出的,结果报超时。
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
double sum,n;
long long t,a;
scanf("%lld",&t);
while(t--)
{
scanf("%lf",&n);
sum=n*log10(n);
a=(long long)sum;sum=sum-a;
sum=pow(10,sum);
a=(long long)sum;
printf("%lld\n",a);
}
return 0;
}