解法
用了高精度乘法模板基础上加了个n循环×2,再加个四舍五入进位
样例
#include<iostream>
#include<vector>
using namespace std;
const int N=1e6+10;
int pos,cnt=0;
vector<int> mul(vector<int> &A,int b){
vector<int> C;
int t=0;
for(int i=0;i<A.size();i++){
t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
if(t){
C.push_back(t);
cnt++;
}
while(C.size()>1 && C.back()==0){
C.pop_back();
}
return C;
}
int main(){
string a;
int n;
vector<int> A;
cin>>n>>a;
for(int i=a.size()-1;i>=0;i--){
if(a[i]!='.') A.push_back(a[i]-'0');
else pos=i;
}
for(int i=1;i<=n;i++){
A=mul(A,2);
}
//cout<<pos<<" "<<cnt<<endl;
for(int i=A.size()-(pos+cnt)-1;i<A.size();i++){
if(A[i]>=5&&i==A.size()-(pos+cnt)-1){
A[i+1]++;
}
if(A[i]>=10){
if(i==A.size()-1){
A.push_back(A[i]/10);
cnt++;
}
else A[i+1]+=A[i]/10;
A[i]=A[i]%10;
}
}
for(int i=A.size()-1;i>=A.size()-(cnt+pos);i--){
cout<<A[i];
}
return 0;
}