Leftmost Digit(数论)

来源:互联网 发布:淘宝客服催好评用语 编辑:程序博客网 时间:2024/06/05 15:30

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
234
 
Sample Output
22
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
 


题意:

求n^n的最左边的位数!!看题目  n到100000000

解析:

N^N=a*10^k //0<a<1,k为N^N的位数
两边取以10为底的对数
N*log10(N)=log10(a)+k
k=log10(N^N)=N*log10(N)取整
则log10(a)=N*log10(N)-取整(N*log10(N))

代码:

#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int main() {int ca,n;double x;cin>>ca;while( ca-- ) {cin>>n;x=n*log10((double)n);x=x-(__int64)x;cout<<(int)pow(10.0,x)<<endl;}return 0;}
int 和 long 型为 32 位整型,其范围为 -2G(-21亿多)至 2G(+21亿多),若需要计算的整数超出此范围,则需要使用 __int64 类型,此类型为 64位整数,其范围非常大,一般不会超出范围