对一个数num可写为 num=10n * a,即科学计数法,使a的整数部分即为num的最高位数字,numnum=10n * a这里的n与上面的n不等
两边取对数: num*lg(num) = n + lg(a);
∵a<10
∴0<lg(a)<1
设x=n+lg(a) → n为x的整数部分,lg(a)为x的小数部分
∵x=num*lg(num);
∴a=10(x-n)=10(x-int(x)))
再取a的整数部分即得num的最高位
代码:
#include<cstdio>
#include<cmath>
int main()
{
int t;
double x;
__int64 n;
scanf("%d",&t);
while(t--){
scanf("%I64d",&n);
x=n*log10((double)n);
x-=(__int64)x;
x=pow(10.0,x);
printf("%d
",(int)x);
}
return 0;
}