三个情况,前面补0,后面补0,中间移小数点
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
bool neg=false;
int b;
auto posE=s.find('E');
string s1=s.substr(0,posE);
string s2=s.substr(posE+1);
b=stoi(s2);
if(b==0){
if(s1[0]=='+')s1.erase(0,1);
printf("%s",s1.c_str());
return 0;
}
if(s1[0]=='+')s1.erase(0,1);
else if(s1[0]=='-'){
neg=true;
s1.erase(0,1);
}
if(s1.size()!=1)s1.erase(1,1);
int aimP=1+b;
if(aimP<=0){
s1.insert(0,-aimP,'0');
s1="0."+s1;
}else if(b+1>=s1.size()){
s1.insert(s1.end(),-s1.size()+b+1,'0');
}else{
s1.insert(1+b,1,'.');
}
if(neg)s1="-"+s1;
printf("%s",s1.c_str());
}