思路 瞎几把模拟
一堆特判
主要特判一下前导零还有后导零的位置,并且还有" . "的位置
char str1[10000005];
void solve()
{
cin>>str1;
int len=strlen(str1);
int pos1=-1;
int pos2=-1,pos3=-1;
for(int i=0;i<len;i++) if(str1[i]=='.') { pos1=i; break;}
if(pos1==-1){
for(int i=0;i<len;i++) if(str1[i]!='0') { pos2=i; break;}
for(int i=len-1;i>=0;i--) if(str1[i]!='0') { pos3=i; break;}
if(pos3==-1&&pos2==-1){
cout<<0<<endl;
}else{
for(int i=pos2;i<=pos3;i++){
if(i==pos2+1) cout<<'.';
if(i==pos2) cout<<str1[pos2];
else cout<<str1[i];
}
if(pos2!=len-1){
cout<<'E';
cout<<len-pos2-1<<endl;
}
}
}else{
for(int i=0;i<pos1;i++) if(str1[i]!='0') { pos2=i; break;}
for(int i=len-1;i>pos1;i--) if(str1[i]!='0') { pos3=i; break;}
if(pos2==-1&&pos3==-1){
cout<<0<<endl;
}else if(pos3==-1){
for(int i=pos1-1;i>=pos2;i--){
if(str1[i]!='0'){
pos3=i;
break;
}
}
for(int i=pos2;i<=pos3;i++){
if(i==pos2+1) cout<<'.';
if(i==pos2) cout<<str1[pos2];
else cout<<str1[i];
}
if(pos2!=pos1-1){
cout<<'E';
cout<<pos1-pos2-1<<endl;
}
}else if(pos2==-1){
int ans=0;
for(int i=pos1+1;i<=pos3;i++){
ans++;
if(str1[i]!='0'){
pos2=i;
break;
}
}
for(int i=pos2;i<=pos3;i++){
if(i==pos2+1) cout<<'.';
if(i==pos2) cout<<str1[pos2];
else cout<<str1[i];
}
cout<<"E-";
cout<<ans<<endl;
}else{
for(int i=pos2;i<pos1;i++){
if(i==pos2) cout<<str1[pos2]<<'.';
else cout<<str1[i];
}
for(int i=pos1+1;i<=pos3;i++){
cout<<str1[i];
}
if(pos2!=pos1-1){
cout<<'E';
cout<<pos1-pos2-1<<endl;
}
}
}
}