题目链接:https://www.patest.cn/contests/pat-a-practise/1073
解题思路:这道题我开始打算用scanf的带有特定格式输入来接收数据的,但是经过测试,这种方法行不通,不过可以接收像年月日这样的输入2018/2/5,scanf(“%d/%d/%d”,&year,&month,&day)。代码部分是用gets接收一行数据,它能识别换行符并结束接收。需要注意的是这种数据+1.234E+03,这个时候的末尾小数不能输出。
#include <cstdio>
#include <cstring>
const int maxn = 10005;
char str[maxn];
int main(){
gets(str);
int len = strlen(str);
if(str[0]=='-') printf("%c",str[0]);
int pos=0;
while(str[pos] != 'E'){
pos++;
}
int coef = str[1]-'0',exp = 0;
for(int i=pos+2;i<len;i++){
exp = exp*10+str[i]-'0';
}
if(str[pos+1]=='-'){
for(int i=0;i<exp;i++){
printf(i==0?"0.":"0");
}
printf("%d",coef);
for(int i=3;i<pos;i++){
printf("%c",str[i]);
}
}else{
printf("%d",coef);
for(int i=3;i<pos;i++){
printf("%c",str[i]);
if(i==exp+2&&exp!=pos-3) printf(".");
}
for(int i=pos-3;i<exp;i++){
printf("0");
}
}
printf("\n");
return 0;
}