zoukankan      html  css  js  c++  java
  • 1024 科学计数法 (20 分)

    1024 科学计数法 (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

    现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

    输入格式:

    每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

    输出格式:

    对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

    输入样例 1:

    +1.23400E-03
    

    输出样例 1:

    0.00123400
    

    输入样例 2:

    -1.2E+10
    

    输出样例 2:

    -12000000000
    思路:
      通过这个题目,我主要学习到了scanf()的另外一种使用方法。scanf("%[^]),和scanf("%s")的区别是:
    前者在读字符串的时候在遇到^符号后面的字符时候停止(不会读入那个终止符),而后者在遇到空白,换行时候
    终止。
      本题中,设一个char数组为line,设一个int变量来表示指数如ep,则写法为scanf("%[^E}E%d",line,&ep)
    这样就在读入的时候顺利的把底数和指数部分分开了。
      
    #include <iostream>
    #include <cmath>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    
    
    
    int main()
    {
        char line[100000];
        int exponent;
        scanf("%[^E]E%d",line,&exponent);
        char *p=line;
    
        if(*p=='-') printf("%c",'-');
         p++;
        if(exponent>=0)
        {
            putchar(*p);
            p++;
            p++;//跳过小数点
            for(;exponent>0;exponent--)
            {
                printf("%c",*p?*p:'0');
                p++;
            }
            if(*p)
            {
                printf(".");
                while(*p)
                    printf("%c",*p++);
            }
        }
        else
        {
            printf("0.");
            for(exponent++;exponent<0;exponent++)
                printf("0");
            while(*p)
            {
                if(*p!='.')
                    printf("%c",*p);
                p++;
            }
        }
        return 0;
    }
     
  • 相关阅读:
    【刷题】BZOJ 4078 [Wf2014]Metal Processing Plant
    【刷题】BZOJ 4000 [TJOI2015]棋盘
    【刷题】BZOJ 3495 PA2010 Riddle
    【刷题】BZOJ 4977 [Lydsy1708月赛]跳伞求生
    Linux 文件系统 相关
    Ubuntu、Sql Server卸载心得
    CVTE面试总结
    open_clientfd(char* hostname,int port)和open_listenfd(int port)
    将十六进制显示为点分十进制
    Linux 小记录
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10412457.html
Copyright © 2011-2022 走看看