1. 程式人生 > >[xdoj1029]求解某個數的最高位和最低位

[xdoj1029]求解某個數的最高位和最低位

浮點 打表 typedef def 註意 color spa namespace pre

解題關鍵:

1、最高位求法

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));
x的最高位=floor(10^k);

註意浮點數會有誤差,所以,通不過時要加點小數

2、最低位求法

普遍情況下可以運用快速冪求解,而本題由於是2的n次冪,所以可以直接用打表求解。

#include<bits/stdc++.h>
using namespace std;
typedef 
long long ll; int b[100]={2,4,8,6}; int main(){ int t,n,t2; double m,x; cin>>t; while(t--){ cin>>n; t2=(n-1)%4; x=n*log10(2.0); x-=(int)x; m=(int)(pow(10.0,x)+0.000001); cout<<m<<" "<<b[t2]<<endl; } }

[xdoj1029]求解某個數的最高位和最低位