http://acm.hdu.edu.cn/showproblem.php?pid=1060
m=n^n;两边同取对数,得到,log10(m)=n*log10(n);再得到,m=10^(n*log10(n));
然后,对于10的整数次幂,第一位是1,所以,第一位数取决于n*log10(n)的小数部分
#include <stdio.h>
#include <math.h>
int main()
{
__int64 x,n,q;
int T;
while(scanf("%d",&T)!=EOF){
while(T--){
scanf("%I64d",&x);
double p,m;
m=(double)x*log((double)x)/log(10);
n=(__int64) m;
p=m-n;
q=(__int64)pow(10,p);
printf("%I64d\n",q);
}
}
}