•
Problem Description
•
Givena positive integer N, you should output the
leftmost digit of N^N.
Input
•
Theinput contains several test cases. The first line of
the input is a singleinteger T which is the number of
te
st cases. T test cases follow.
Each test case
contains a si
gl
e positive integerN(1<=N<=1,000,000,000).
•
所谓
N!
的(十进制)位数,就是
Lg(N!)+1
,根据数学公式,有
•
N!=1*2*……*N
•
Lg(N!)=lg(2)+……+lg(N)
•
设
n
n
= d.xxx * 10
(k-1)
,
其中
k
表示
n
n
的位数。
•
那么
d.xxx= 10
(log10(n^n)-(k-1))
,
再对
d.xxx
取整即可获得最终结果。那么
k
是多少呢?
•
k =log10(n
n
)
的整数部分
+1 = (int)log10(n
n
)+1;
至此,可以获得
d
的计算公式为
d =(int)(10^(log10(n^n)-(int)log10(n^n));
•
#include<stdio.h>
•
#include<math.h>
•
intmain()
•
{
•
intt,n;
•
doublex = 0.0;
•
scanf("%d",&t);
•
while( t-- )
•
{
•
scanf("%d",&n);
•
x= n*log10( (double)n );
•
x-= (long long)x;
•
x= (int)pow(10,x);
•
printf("%.0lf\n",x);
•
}
•
return0;
•
}