最高位数字
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
求N^N的个位数字大家应该都会了,可是,N^N的最高位数字你会求吗?
-
输入
-
多组测试数据。
每组数据输入一个正整数N(N≤1,000,000,000)。
输出
- 对于每组数据,输出N^N的最高位数字。 样例输入
-
3 4
样例输出
-
2 2
来源
- hdu 上传者
分析:
题目是这样转化的。
首先用科学计数法来表示 N^N = a*10^x; 比如N = 3; 3^3 = 2.7 * 10^1; 我们要求的最右边的数字就是(int)a,即a的整数部分;
OK, 然后两边同时取以10为底的对数 lg(N^N) = lg(a*10^x) 化简 N*lg(N) = lg(a) + x; 继续化 N*lg(N) - x = lg(a) a = 10^(N*lg(N) - x);
现在就只有x是未知的了,如果能用n来表示x的话,这题就解出来了。
又因为,x是N^N的位数。比如 N^N = 1200 ==> x = 3; 实际上就是 x 就是 lg(N^N) 向下取整数,表示为[lg(N^N)]
ok a = 10^(N*lg(N) - [lg(N^N)]); 然后(int)a 就是答案了
代码:#include<stdio.h> #include<math.h> int main() { long long ans; double k,n; while(scanf("%lf",&n)!=EOF) { //scanf("%lf",&n); k=n*log10(n); k=k-(long long)k; ans=(long long)pow(10.0,k); printf("%lld\n",ans); } return 0; }
-
多组测试数据。