首页 > 代码库 > [xdoj1029]求解某个数的最高位和最低位
[xdoj1029]求解某个数的最高位和最低位
解题关键:
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]求解某个数的最高位和最低位
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。