题目:
Given a positive integer N, you should output the leftmost digit of N^N.
输入:
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).输出:
For each test case, you should output the leftmost digit of N^N.
样例输入:
2 3 4
样例输出:
2 2
提示:
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最左边那位数字是什么。
首先我们把n^n用科学计数法表示出来,n^n=a*10^x,这里的a就是我们要求的数,例如4^4=256=2.56*10^2,a为2。
两边取对数,lg(n^n)=lg(a*10^x),变一下形,nlg(n)=lg(a)+xlg(10)=lg(a)+x
a=10^(nlg(n)-x).
接下来把x求出来a也就出来了,x其实就是n^n的位数-1,求一个数的位数通常是对它取对数,向下取整后加一。例如:(int)lg(256)+1=3。所以x=(int)lg(n^n)。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long n;
cin>>n;
double x=log10((double)n)*n;
int a=pow(10,x-(long long)x);
cout<<a<<"\n";
}
return 0;
}