这道题本来是想,先对2的次方用高精度求解,再将浮点型转化为整型,用高精乘低精度求,但是,没有考虑到这个浮点型数组范围太大,只能用字符串进行表示
#include <bits/stdc++.h>
using namespace std;
//高精乘低精
vector<int>mul1(vector<int>&A,int b){
vector<int> C;
//t为进位
int t=0;
for(int i=0;i<A.size()||t;i++){
if(i<A.size())t+=A[i]*b;
C.push_back(t%10);
//进位
t/=10;
}
//去除前导零
while(C.size()>1&&C.back()==0)C.pop_back();
return C;
}
int main()
{
int cnt=0;//处理小数点
//你要想需要把浮点数转化为整型
//输入n,将浮点数
int n;string m;cin>>n>>m;
vector<int>a;
//这里将浮点数字符串存入动态数组
for(int i=m.length()-1;i>=0;i--){
if(m[i]!='.')a.push_back(m[i]-'0');
else cnt=m.length()-i-1;//几位小数
}
//高精度乘低精度,高精度是浮点数,低精度就是2的次方个数
while(n--)a=mul1(a,2);
//结果再加上小数
for(int i=a.size()-1;i>=0;i--){
//cout<<"进入这";
if(i==cnt){
//达到小数点,开始进行四舍五入判断
if(a[i-1]>=5){
cout<<a[i]+1;
break;
}
else{
cout<<a[i];
break;
}
}
cout<<a[i];
}
return 0;
}