PAT 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
需注意指数为0的情况
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<stdlib.h>
 5 int main(){
 6     char a[20000];
 7     scanf("%s",a);
 8     char delim[] ="E";
 9     char b[20000];
10     char c[20000];
11     strcpy(b,strtok(a,delim));
12     strcpy(c,strtok(NULL,delim));
13     char *c1 = &c[1];
14     int index = atoi(c1);
15     if(index==0){
16         printf("0.");
17         for(int i=0;i<strlen(b)-3;i++){
18             printf("0");
19         }
20         return 0;
21     }
22     if(b[0]=='-')
23         printf("-");
24     if(c[0]=='-'){
25         printf("0.");
26         index--;
27         for(int i=0;i<index;i++){
28             printf("0");
29         }
30         printf("%c",b[1]);
31         for(int i=3;i<strlen(b);i++){
32             printf("%c",b[i]);
33         }
34     }
35     if(c[0]=='+'){
36         printf("%c",b[1]);
37         if(strlen(b)-3<=index){
38             for(int i=3;i<strlen(b);i++){
39                 printf("%c",b[i]);
40             }
41             for(int i=strlen(b)-3;i<index;i++){
42                 printf("0");
43             }
44         }
45     else{
46         for(int i=3;i<index+3;i++){
47             printf("%c",b[i]);
48         }
49         printf(".");
50         for(int i=index+3;i<strlen(b);i++){
51             printf("%c",b[i]);
52         }
53     }
54     }
55     
56 }

原文地址:https://www.cnblogs.com/lolybj/p/6195239.html