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


代码讲解:这题用了我30分钟。。。。我实在是太菜了,这题突出的是一个细,没什么算法可言,但一定要
想好各种情况,开始我基本上罗列了所有情况,然后仔细分析发现,很多情况可以归纳为一起的。。。
这题如果在考试中,是很容易让人慌乱的题,明明很简单,还是要加强自己的细心程度。。。

#include<stdio.h>
int main()
{
 char a[10003];
 int i;
 char b[10003];
 int flag;
 int zhi;
 int j;
 while(scanf("%s",a)!=EOF)
 {
  zhi=0;                    //指数值
  j=0;                     //b数组的个数,也就是有效数字的个数
  for(i=1;a[i]!='E';i++)
  {
   if(a[i]!='.')       //除了.之外所有的有效数字保存在b数组当中
   b[j++]=a[i];
  }
  i++;
  if(a[i]=='-')
  {
   flag=1;              //标志指数是正还是负
  }
  else
  {
   flag=0;
  }
  
  for(i++;a[i]!=0;i++)         //指数求值。
  {
   zhi=zhi*10+a[i]-'0';
  }
  if(a[0]=='-')    
  {
   printf("-");
  }
   
   if(flag==1)      //指数是负
   {
    
     for(i=0;i<zhi;i++)
     {
      printf("0");
      if(i==0)
      printf(".");
     }
     for(i=0;i<j;i++)
     {
      printf("%c",b[i]);
      if(i==0&&!zhi)
      printf(".");
     }
    
   
   }
   else                     //指数是正
   {
    
        i=0;
        while(b[i]=='0'&&i<zhi)i++;
        while(i<j)
        {
        printf("%c",b[i]);
        if(i!=j-1&&i==zhi)
        printf(".");
        i++;
        }
       
    for(i=0;i<zhi-j+1;i++)
    printf("0");
    
    
   
  }
  
  printf("\n");  
  
 }
 return 0;
}


posted @ 2020-10-27 20:31  罪梦者  阅读(110)  评论(0)    收藏  举报