n的m次方的最高位c++求法(xdoj 1029)

先貼一道題 西電oj 1029 http://acm.xidian.edu.cn/problem.php?id=1029
這道題中需要用到解2的n次方的最高位的方法。
先講正題,最後講這個題的題解。

long long int x=n^m;
式子兩邊同時取lg lg(x)=m*lg(n);
x=10^(m*lg(n));
10的整數次方的最高位一定是1,所以x的最高位取決於m*lg(n)的小數部分
k=m*lg(n)的小數部分=m*lg(n)-floor(m*lg(n));
floor函數的用法請自行百度
x的最高位=floor(10^k);

xdoj1029題解:

#include <bits/stdc++.h>

using namespace std;
int low[4]={6,2,4,8};
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        long long int n;
        scanf("%lld",&n);

        double p=log10(2.0);
        double m=n*p;
        m-=floor(m);
        printf("%.f %d\n",floor(pow(10.0,m)+0.000000001),low[n%4]);
    }
    return 0;
}

注意精度和輸出!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章