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 

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

注意精度和输出!!

你可能感兴趣的:(xdoj,acm水题)