HDOJ 1060 Leftmost Digit
题目
题意
求 NN (N ^ N) (1<=N<=1,000,000,000). 最左面的一位
题解
这种 n 巨大的题目,暴力 一定是不行的
这就是技巧了
通常很大的数 而且 可以表示乘幂形式的 都可以用对数 化简
lg(NN)=N×lgN
把 NN 表示成 科学计数法 a×10m (由科学计数法0 < a < 1)
取对数 N×lgN=m+lga
即m为 N×lgN 的整数部分 a为小数部分
即 ⌊a∗10⌋ 为答案
m = ⌊N×lgN⌋
lga=N×lgN−⌊N×lgN⌋
a=10(lga)(MathJax 表达式好像不太对,注一下 a = 10^(lg a))
代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,m;
double t;
cin >> n;
while(n--)
{
cin >> m;
t = m*log10(m);
t -= floor(t);
cout << (int)pow(10,t) << endl;;
}
return 0;
}