#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
cin >> str;
if(str[0] == '-') cout << '-'; //该数字为负数,先输出负号
int pos = 0; //记录'E'的下标
while(str[pos] != 'E') pos++;
int exp = 0; //exp记录指数的绝对值
for(int i = pos + 2; i < str.length(); i++){
exp = exp * 10 + str[i] - '0';
}
if(str[pos + 1] == '-'){ //指数为负
printf("0."); //先输出"0."
for(int i = 0; i < exp - 1; i++){ //再输出exp-1个0
printf("0");
}
for(int i = 1; i < pos; i++){ //再输出底数中所有的有效数字
if(str[i] != '.'){
printf("%c", str[i]);
}
}
}
else{ //指数为正
for(int i = 1; i < pos; i++){
if(str[i] == '.') continue;
printf("%c", str[i]);
if(i - 2 == exp && pos - 3 > exp){ //i-2是底数中小数点后已输出的数字个数,pos-3是底数中小数点后所有的数字个数
printf("."); //只有当底数中小数点后已输出的数字个数等于指数,并且后面还有未输出的数字时才输出小数点
}
}
for(int i = pos - 3; i < exp; i++){ //上面的循环结束代表底数部分已全部输出完毕,如果底数中小数点后数字个数比指数小,那么还要补0
printf("0");
}
}
return 0;
}
个人感觉:
像是玩文字游戏,玩的是字符而已
感觉这种题目只是为了让你处理字符串而出题,就是想让你恶心,一点实际意义都没有。
这样转换出来的东西只是看着像个数字,其实不是数字,也不能继续使用它来进行后续计算。
令人恶心。