• 1024 科学计数法


    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 int main()
     6 {
     7     char num[10001];
     8     gets(num); 
     9     int len=strlen(num);
    10     char num1[len],num2[len];
    11     (num[0]=='+')?(printf("")):(printf("-"));
    12     int qian=0,hou=0,yi=0,t;  //qian小数点前位数,hou小数点后位数,sum包括小数点总位数,t为标记 
    13     for(int i=1;i<len;i++)
    14     {
    15         
    16         if(num[i]!='.')
    17         num1[qian++]=num[i];
    18         else
    19         {
    20             num1[qian]='';
    21             t=i+1;
    22             break;
    23         }
    24     }
    25     for(int i=t;i<len;i++)
    26     {
    27         if(num[i]!='E')
    28             num2[hou++]=num[i];
    29         else
    30         {
    31             num2[hou]='';
    32             t=i+1;
    33             break;
    34         }
    35     }
    36      int flag=0;//flag=0指数为负,往前移 
    37     if(num[t]=='+')
    38       flag=1;//flag=1指数为正,往后移 
    39     for(int i=len-1;i>=t+1;i--)
    40     {
    41         yi=yi+(num[i]-'0')*pow(10,len-1-i);//yi移动的格数
    42     }
    43     if(flag==1)//往后移
    44     {
    45        printf("%s",num1);
    46     if(yi>=hou)
    47     {
    48         printf("%s",num2);
    49         for(int i=0;i<yi-hou;i++)
    50         printf("0");
    51     }
    52     else if(yi<hou)
    53     {
    54         int i; 
    55         for(i=0;i<yi;i++)
    56         printf("%c",num2[i]);
    57         printf(".");
    58         for(int j=i;j<hou;j++)
    59         printf("%c",num2[j]);
    60     }
    61     }
    62     else if(flag==0)//往前移
    63     {
    64         if(yi>=qian)
    65         {
    66         printf("0.");
    67         for(int i=0;i<yi-1;i++)
    68         printf("0");
    69         printf("%s%s",num1,num2);
    70         }
    71         else if(yi<qian)
    72         {
    73             int i;
    74             for(i=0;i<qian-yi;i++)
    75             printf("%c",num1[i]);
    76             printf(".");
    77             for(int j=i;j<qian;j++)
    78             printf("%c",num1[i]);
    79             printf("%s",num2);
    80         }
    81     }    
    82         return 0;
    83 }
    大佬见笑,,
  • 相关阅读:
    我告诉你 电脑软件工具
    mysql 查询当天、本周,本月,上一个月的数据
    springboot:springboot+mybatis多数据源最简解决方案
    MySQL数据库优化的(经典必看)
    MyBatis 的强大特性之一便是它的动态 SQL之常用属性使用
    你知道Spring 中使用了哪些设计模式?
    kafka 相关面试问题
    掌握TCP/IP的通信原理(三次握手、四次挥手)。
    jsp和servlet实现文件的上传和下载
    Java获取数据库记录通过javabean映射,并存入list集合
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/10319245.html
Copyright © 2020-2023  润新知