题目链接:点击打开链接
知识点笔记:
这个题的关键是先得到E的位置pos,再得到指数exp的位置,exp的位置是pos+2
在exp>0时,比较难分析,小数点应该加在exp+2的位置上,原小数点和E之间的数字个数pos-3不能等于小数点右移的位数exp,因为此时是一个整数,不需要小数点。
AC代码:#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[10005];
scanf("%s",str);
int len=strlen(str);
int pos=0,exp=0;
if(str[0]=='-') printf("-");
while(str[pos]!='E') pos++;
for(int i=pos+2;i<len;i++){
exp=exp*10+str[i]-'0';
}
if(exp==0){
for(int i=1;i<pos;i++){
printf("%c",str[i]);
}
}
if(str[pos+1]=='-'){
printf("0.");
for(int i=0;i<exp-1;i++){
printf("0");
}
printf("%c",str[1]);
for(int i=3;i<pos;i++){
printf("%c",str[i]);
}
}else{
printf("%c",str[1]);
for(int i=3;i<pos;i++){
printf("%c",str[i]);
if(i==exp+2 && pos-3!=exp){
printf(".");
}
}
for(int i=0;i<exp-pos+3;i++){
printf("0");
}
}
return 0;
}