zoukankan      html  css  js  c++  java
  • 1024 科学计数法

    部分内容转载于:https://blog.csdn.net/tangxinru123/article/details/84975248

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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


    以下为引用内容:

    思路:首先把情况分为两大类:
    1.指数小于0:例:-1.23E-3,转为普通数字:-0.00123,指数为3,则小数点后带2个0,规律如下:设指数为e,小数点后就有e-1个0。

    2.指数大于等于0:这个又可以分成两个情况:

    指数长度小于小数:例:+ 1.2345000E + 3,转为普通数字:1234.5000
    指数长度大于小数:例:+ 1.23E + 3,转为普通数字:1230
    这个在一个循环内就能解决:小数点后移e位,e位前如果没有数值就补0,e位后如果没有数值了就不加小数点了

    提升自我:这个    scanf("%c%c.%[0-9]E%d",&h,&a[0],a+1,&e);是在百度上学会的,有关%[]的输入真的很牛。

    输入是对其进行拆分,百度出来的极其巧妙的做法:

    %[] 的意思是:读入此集合所限定的那些字符。例如 %[A-Z] 是指接受大写字母,一旦遇到非大写字母便停止接受,而 %[^] 是指不要读入此集合所限定的那些字符。例如 % [^A-Z] 是指不接受大写字母,一旦遇到大写字母便停止接受。

    填坑日记:数组一定要设置大一点,我原先容量为10000,测试点5老是通不过,看了好几遍代码我觉得还是没啥问题,然后把数组改大一点,就对了。

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 int main()
     5 {
     6     char h,a[10001]={0}; //注意这里和下面三元表达式哪里的0的区别
     7                          //这里字符数组初始化的0是数字0
     8                          //但在下面scanf中输入的0是字符'0'
     9                          //所以才能有下面的 a[i]==0?'0':a[i]
    10     int i,e;
    11     scanf("%c%c.%[0-9]E%d",&h,&a[0],a+1,&e);
    12     if(h=='-')
    13     printf("-");
    14     if(e<0)       //指数小于0的情况 
    15     {
    16         printf("0.");
    17         e=-e-1;
    18         while(e)
    19         {
    20             printf("0");
    21             e--;
    22         }
    23         printf("%s",a);
    24     }
    25     else         //指数不小于0的情况 
    26     {
    27         for(i=0;i<=e||a[i]!=0;i++)
    28         {
    29             if(i==e+1)
    30             {
    31                 printf(".");
    32             }
    33             printf("%c",a[i]==0?'0':a[i]);
    34         }
    35     }
    36     return 0;
    37  } 
  • 相关阅读:
    CH4302 Interval GCD
    20201017 模拟赛总结
    LOJ#2610. 「NOIP2013」货车运输
    POJ3696 The Luckiest number
    20200925 小练习总结
    更新一波状态
    AFO
    【扩展lucas定理】
    【LCT维护子树信息】uoj207 共价大爷游长沙
    [bzoj4589]Hard Nim(FWT快速沃尔什变化+快速幂)
  • 原文地址:https://www.cnblogs.com/oaoa/p/11263381.html
Copyright © 2011-2022 走看看