Notice:
读取E前放入string,E后放入int
进行比较输出
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
int main(){
string s;
cin >> s;
int pos = 0 ;
while(s[pos] != 'E')pos++; //此时pos指向E那个字符
string f = s.substr(1,pos - 1);//f为E之前的字符,不包括符号
int n = stoi(s.substr(pos + 1,s.length() - pos - 1)); //n为之后的数值
if(s[0] == '-')cout << '-';//若为负数,先输出-
//n < 0 的情况
if(n < 0){ //0.xxx\0.0xx
cout << "0."; //先输出0. 再循环输出剩下的0
for(int i = 0;i < abs(n) - 1;i++){
cout << '0';
}
for(int i = 0;i < f.length();i++){ //除了小数点都输出
if(f[i] != '.')
cout << f[i];
}
//n > 0 的情况
}else{
if(f.length() - 2 <= n){ //n可以去掉小数点的情况,输出为一个整数
//若t=1.234 n = 3,则输出1234。此时f.length() = 5。
for(int i = 0;i < f.length();i++){ //先输出t 后补0
if(f[i] != '.')
cout << f[i];
}
for(int i = 0;i < abs(n) - f.length() + 2;i++){
cout << '0';
}
}else{ //n不可以去掉小数点的情况,输出为一个浮点数
for(int i = 0;i < f.length();i++){ //相当于后移小数点 若t=1.2345 n = 3
if(f[i] != '.') //则为1234.5 在第4位(即n+1)输出'.'
cout << f[i];
if(i == n + 1)
cout << '.';
}
}
}
return 0;
}