题目链接:http://acm.gdufe.edu.cn/Problem/read/id/1057
Leftmost Digit
Time Limit: 2000/1000ms (Java/Others)
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<=10000). Hint:64位整数使用long long int,输入输出%lld.
Output:
For each test case, you should output the leftmost digit of N^N.
Sample Input:
2 3 4
Sample Output:
2 2
分析:
对任意正数num,可写成num=a*10^n,a的整数部分为num的最左位数字。
令num^num=a*10^n,则(int)a为本题的解。
对两边取对数:num*lg(num)=lg(a)+n,
令x=lg(a)+n=num*lg(num),
由于0<a<10,所以0<lg(a)<1,所以n为x的整数部分,lg(a)为x的小数部分,
lg(a)=x-n=x-(int)x,a=10^(x-(int)x),再对a取整,本题得解。
代码:
#include <stdio.h>
#include <math.h>
int main(){
int n,t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
double x=n*log10(n);
double a=pow(10,x-(int)x);
printf("%d\n",int(a));
}
return 0;
}