先貼一道題 西電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;
}
注意精度和輸出!!