Leftmost Digit

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).
 
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.
先将N^N对数化,取10为底,又N^N可表示为a*10^x,其中9>=a>=1,故x为N^N的位数-1,eg:100=1*10^2 故x为2
lg(N^N) = lg(a*10^x) ;

化简        N*lg(N)  = lg(a) + x;

继续化       N*lg(N) - x = lg(a)

            a = 10^(N*lg(N) - x);

问题转化成求x:

因为1<=a<=9,所以lg(a)<1;

故x=(int) N*lg(N) 向下取整

最后(int)a就是最后的结果

 

View Code
 1 #include<iostream> 

 2 #include<cmath> 

 3 #include<cstdio>

 4 using namespace std;

 5 int main() 

 6 { 

 7     int n; 

 8     __int64 m;

 9      cin>>n; 

10     while(n--) 

11     { 

12         scanf("%I64d",&m);

13         double t = m*log10(m*1.0); 

14         t -= (__int64)t; 

15         __int64 ans = pow((double)10, t); 

16         printf("%I64d\n",ans); 

17     } 

18     return 0; 

19 } 

 

 

 

你可能感兴趣的:(left)