科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9]
.
[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。.
[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。
+1.23400E-03
0.00123400
-1.2E+10
-12000000000
1 #include <stdio.h> 2 #include <string.h> 3 int main(){ 4 int a=0,b=0,e=0; 5 char s[10005]; 6 7 scanf("%s",s); 8 9 //a是负数则输出负号,正数不输出‘+’ 10 if(s[0]==‘-‘) 11 printf("-"); 12 13 for(int i=0;i<strlen(s);i++){ 14 if(s[i]==‘E‘){ 15 e=i; //e为‘E‘所在的下标 16 } 17 } 18 for(int i=e+2;i<strlen(s);i++){ 19 b = b*10 + (s[i]-‘0‘); //b为指数部分 20 } 21 //指数为负数的情况 22 if(s[e+1]==‘-‘){ 23 printf("0."); //输出整数部分 24 //输出小数点后0的个数 25 for(int i=1;i<=b-1;i++){ 26 printf("0"); 27 } 28 printf("%c",s[1]); 29 //输出小数点后非零部分 30 for(int i=3;i<e;i++){ 31 printf("%c",s[i]); 32 } 33 //指数为正数的情况 34 }else { 35 printf("%c",s[1]); 36 if(b<(e-3)){ //指数够大,不需要小数点 ,需补足后面的零 37 //先输出正数部分 38 for(int i=3;i<3+b;i++){ 39 printf("%c",s[i]); 40 } 41 //输出小数点 42 printf("."); 43 //输出小数部分 44 for(int i=b+3;i<e;i++){ 45 printf("%c",s[i]); 46 } 47 }else{ //指数不够大,小数点要向右移位 48 for(int i=3;i<e;i++){ 49 printf("%c",s[i]); 50 } 51 for(int i=1;i<=b-e+3;i++){ 52 printf("0"); 53 } 54 55 } 56 57 } 58 59 60 return 0; 61 }
原文:https://www.cnblogs.com/geyang/p/12304769.html