思路不是很清晰,但是通过了,很神奇!
对正指数的处理分两种情况:
1.有效数字不足时补零
2.指数补全后还存在小数的情况
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
string str;
cin>>str;
if(str[0]=='-') putchar(str[0]);
int flag = 0,num=0,tag=0,t;
for(int i=0;i<str.size();i++){
if(str[i]=='E') {
flag=1;
t = i;
if(str[i+1]=='-') tag=1;//指数为负
}
if(flag==1&&str[i]!='+'&&str[i]!='-'&&str[i]!='E'){
num=num*10+str[i]-'0';
}
}
if(tag ==1){
for(int j=0;j<num;j++){
printf("0");
if(j==0) printf(".");
}
for(int i=1;str[i]!='E';i++){
if(str[i]!='.') putchar(str[i]);
}
}
else{
int cnt=0,k;
for(k=1;k < t && cnt<=num;k++){
if(str[k]!='.') {
putchar(str[k]);
cnt++;
}
}
while(cnt<=num){
putchar('0');
cnt++;
}
flag=0;
while(k<t){
if(flag==0){
printf(".");
flag=1;
}
putchar(str[k]);
k++;
}
}
return 0;
}