[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

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
羊村懒哥:刚想骂一看是友军对不起
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务