高精度+低精度和高精度*低精度的形式大体一致呢~
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int n;
vector<int>B;
//高精度*低精度
void mul(vector<int>& B,int k)
{
int t=0;
for(int i=0;i<B.size();i++)
{
t += B[i]*k;
B[i] = t%10;
t /= 10;
}
if(t) B.push_back(t);
}
//高精度+低精度
void add_1(vector<int>& B,int b,int point)
{
int t = b;
for(int i = point; i < B.size(); i++)
{
t += B[i];
B[i] = t % 10;
t /= 10;
}
if(t) B.push_back(t);
}
int main()
{
string s;
cin>>n>>s;
int point; //记录小数点所处位置
for(int i=0;i<s.size();i++)
{
if(s[s.size()-i-1]=='.') point=i;
else B.push_back(s[s.size()-i-1]-'0');
}
while(n--)
{
mul(B,2); //先不管小数点
//for(int i=B.size()-1;i>=0;i--) cout<<B[i];
//cout<<endl;
}
//cout<<"point:"<<point<<endl;
//cout<<B[point]<<endl;
//五入
if(B[point-1]>=5) add_1(B,1,point);
for(int i=B.size()-1;i>=point;i--) cout<<B[i];
return 0;
}