HDU Leftmost Digit(求n^n最大位的数字)
题目大意是输入N,求N^N的最高位数字。1<=N<=1,000,000,000
估计大家看到N的范围就没想法了。确实N的数字太大,如果想算出结果,即使不溢出也会超时。
这题我纠结了很久。在同学的提示下ac了。
题目是这样转化的。
首先用科学计数法来表示
我们要求的最右边的数字就是(int)a,即a的整数部分;
OK, 然后两边同时取以10为底的对数
化简
继续化
现在就只有x是未知的了,如果能用n来表示x的话,这题就解出来了。
又因为,x是N^N的位数。比如 N^N = 1200
ok
代码:
#include<iostream>
#include<math.h>
int
main()
{
int
n,m;
std::cin>>n;
while
(n--)
{
std::cin>>m;
long
double
t = m*
log10
(m*1.0);
t -= (
__int64
)t;
__int64
ans =
pow
((
long
double
)10, t);
std::cout<<ans<<std::endl;
}
return
0;
}
|
java版:
import java.util.Scanner;
public class Main {
}