注解
1、本题是求N的N次方的最左边数字,首先表示成科学计数法形式。
N^N = a * 10的k次方
两边取对数:Nlog(N)=log(a)+k
Nlog(N)是实数,而k是整数,Nlog(N)-k=log(a)
又因为是科学计数法,所以a<10,log(a)<1
所以a = 10的 (Nlog(N)-k)次方,而k就等于(int)(Nlog(N))
所以a = 10的 (Nlog(N)-(int)(N*log(N)))次方。
然后要得到第一位,就是对a取整即可。
2、本题核心点:取对数,数学推导。
代码
#include <stdio.h>
#include <math.h>
int main() {
int T;
scanf("%d", &T);
for(int i=0; i<T; i++){
double n;
scanf("%lf", &n);
double m = n*log10(n);
long long mm = (long long)m;
double a = pow(10, m-mm);
int ans = (int)a;
printf("%d\n", ans);
}
return 0;
}