取幂的最高位

原题地址
nn用科学计数法表示即:
nn=a * 10x ,其中1<=a<10
两边取对数: n * lg(n) = x + lg(a);
因为0<=lg(a)<1,两边取整得:
x=int(n * lg(n))
回代之后可得a=10(n*lg(n)-int(n*lg(n)))
对a取整后即可取得最高位
写代码的时候要注意,由于n*lg(n)太大,不能直接取整,可能会变成负数,可以将其值缩小之后再取整

#include<iostream>
#include<cmath>
using namespace std;
const int MAX=1000000000;
int main()
{
    int loop;
    cin>>loop;
    while(loop--)
    {
        int n;
        cin>>n;
        double x=n*log(n)/log(10);
        while(x>MAX) x-=MAX;
        cout<<int(pow(10.0,x-int(x)))<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40634175/article/details/88780210
今日推荐