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 {
}