任意一个数都可以用科学表示法来表示, 比如 n = 10^x * m;
在此题中 n*n = 10^x * a; 对两边同时求关于10的对数,则有n*lg(n) = x+lg(a); 且 又因为0<=a<10; 故lg(a)<1;
不妨令x+lg(a) = num; 则num = n*lg(n); 所以=》 a = 10^(num - x);很明显 x = num的整数部分(因为0<=a<10; 故lg(a)<1;)
最后求得实数型 a 最后取整就可以了;
但是这道题不知道怎么回事 2^2 = 3; 如果让其等于四的话wa;
Leftmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12901 Accepted Submission(s): 4936
Problem Description
Given a positive integer N, you should output the leftmost digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the leftmost digit of N^N.
Sample Input
2 3 4
Sample Output
2 2HintIn the first case, 3 * 3 * 3 = 27, so the leftmost digit is 2. In the second case, 4 * 4 * 4 * 4 = 256, so the leftmost digit is 2.
#include<cstdio>
#include<cmath>
int main()
{
double a;
__int64 x, n, t;
scanf("%I64d", &t);
while(t --){
scanf("%I64d", &n);
double temp = n*log10(n);
a = pow(10, temp-(__int64)temp); //重要的是这个一定要强制转换成64位的
printf("%d\n", (int)a);
}
return 0;
}
代码2:
#include<cstdio>
#include<cmath>
int main()
{
double a;
int t;
scanf("%d", &t);
while(t --){
double n;
scanf("%lf", &n);
/*if(n == 2){
printf("4\n" );
continue;
}*/
double temp = n*log10(n);
int ans = pow(10.0, temp-(__int64)temp);
printf("%d\n", ans );
}
return 0;
}