Leftmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15032 Accepted Submission(s):
5813
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
2
Hint
In 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.
Author
Ignatius.L
Recommend
和数学有关的题,要用到数学公式,不可以直接求出这个数。
m=n^n,两边分别对10取对数得 log10(m)=n*log10(n),得m=10^(n*log10(n)),由于10的任何整数次幂首位一定为1,所以m的首位只和n*log10(n)的小数部分有关
题意:输入N, 求N^N的首位是多少。
附上代码:
1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 using namespace std; 5 int main() 6 { 7 __int64 t; 8 int n,m,s; 9 double a,b; 10 scanf("%d",&n); 11 while(n--) 12 { 13 scanf("%d",&m); 14 a=1.0*m*log10(m*1.0); 15 t=(__int64)a; 16 b=a-t; //求出小数部分 17 s=(int)(pow(10,b)); 18 printf("%d ",s); 19 } 20 return 0; 21 22 }