[PAT解题报告] Scientific Notation

简单题,字符串处理,把科学计数法转变为普通浮点数。
科学计数法是一位整数的标准形式,保证有E,并且带指数。可以先找到E,把E转变为空格,然后把指数读出来,如果指数是0,则把E之前的完整输出。
如果指数小于0,则一定是0.xxxx, 注意调整小数点,小数点后补0,输出即可。
如果指数大于0,则一定大于等于1,同样注意小数点,而且有可能最后没有小数点了,结尾还可能要补0。
请注意如果原来输入末尾有0,能不动就补动。

#include <cstdio>
#include <cstring>
#include <string>

char s[10010];

void help(char *s) {
char *p = strstr(s, "E");
int e;
    sscanf(p + 1, "%d", &e);
    *p = 0;
    if (e == 0) {
        puts(s);
    }
    else if (e < 0) {
        printf("0.");
        for (++e;e;++e) {
            putchar('0');
        }
        for (;*s;++s) {
            if (*s != '.') {
                putchar(*s);
            }
        }
        puts("");
    }
    else {
        putchar(*s++);
        for (++s; (*s) && e; --e, ++s) {
            putchar(*s);
        }
        if (*s) {
            putchar('.');
            for (;*s;++s) {
                putchar(*s);
            }
        }
        else {
            for (;e;--e) {
                putchar('0');
            }
        }
        puts("");    
    }    
}
int main() {
    scanf("%s",s);
    if (s[0] == '-') {
        putchar('-');
    }
    if ((s[0] == '+') || (s[0] == '-')) {
        help(s + 1);
    }
    else {
        help(s);
    }
}

原题链接: http://www.patest.cn/contests/pat-a-practise/1073
全部评论
楼主,你好~ 这边可以用*p=0吗? 我写了个测试代码: #include<cstdio> #include<cstring> int main(){     char *str="1.23E-02";     char *p=strstr(str,"E");     puts(p);     *p=0;     puts(p);     return 0; } 会运行出错,*p=0是什么意思哦
点赞 回复 分享
发布于 2016-03-02 21:12

相关推荐

不愿透露姓名的神秘牛友
昨天 20:21
签耀等华
算法功成师:我咋那么想举办你呢,铁铁
点赞 评论 收藏
分享
11-05 11:53
西京学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务