题目链接: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;
}