PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/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 3 int main() 4 { 5 char str[10010]; 6 gets(str); 7 8 int iStr=0,iNum=0,flag1=0,flag2=0,zhishu=0; // 0 正号 1负号 9 char num[10000]; 10 11 //[+-] 12 if(str[0]=='+') flag1=0; else flag1=1; 13 14 // [1-9]"."[0-9]+ 15 iStr=1; 16 while(str[iStr]!='E') 17 { 18 if('0'<=str[iStr] && str[iStr]<='9') 19 { 20 num[iNum]=str[iStr]; 21 iNum++; 22 } 23 iStr++; 24 } 25 26 //E[+-] 27 iStr++; 28 if(str[iStr]=='+') flag2=0; else flag2=1; 29 30 //[0-9]+ 31 iStr++; 32 while(str[iStr]) 33 { 34 zhishu=zhishu*10+str[iStr]-'0'; 35 iStr++; 36 } 37 38 39 // int iStr=0,iNum=0,flag1=0,flag2=0,zhishu=0; // 0 正号 1负号 40 //char num[10000]; 41 if(flag1) printf("-"); 42 if(flag2) 43 { 44 for(int i=0;i<zhishu;i++) 45 { 46 printf("0"); 47 if(!i) 48 printf("."); 49 } 50 for(int i=0;i<iNum;i++) 51 printf("%c",num[i]); 52 } 53 else 54 { 55 if(iNum-1>zhishu) 56 { 57 for(int i=0;i<iNum;i++) 58 { 59 printf("%c",num[i]); 60 if(i==zhishu) 61 printf("."); 62 } 63 } 64 else 65 { 66 for(int i=0;i<iNum;i++) 67 printf("%c",num[i]); 68 for(int i=iNum;i<=zhishu;i++) 69 printf("0"); 70 71 } 72 } 73 return 0; 74 }