JNUOJ 1184 - 科学计数法
Posted tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JNUOJ 1184 - 科学计数法相关的知识,希望对你有一定的参考价值。
花了半个小时,强行拗出一长串又臭又长的代码,把所有情况都分了(该分的,不该分的……都分了……)
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #define MAX 120 5 char num[MAX],d[MAX],b_[10],b; 6 int main() 7 { 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%s",num); 13 if(num[0]==\'0\') 14 { 15 int i,cnt; 16 for(i=2,cnt=0;;i++,cnt++) 17 { 18 if(num[i]==\'e\') break; 19 d[cnt]=num[i]; 20 } 21 d[cnt]=\'\\0\'; 22 i++; 23 for(cnt=0;num[i];i++,cnt++) b_[cnt]=num[i]; 24 b_[cnt]=\'\\0\'; 25 int len_b=strlen(b_); 26 b=0; 27 for(i=0;i<len_b;i++) b+=(b_[i]-\'0\')*(int)pow(10,(len_b-1-i)); 28 int len_d=strlen(d); 29 if(len_d==1 && d[0]==\'0\')//这个数是0 30 { 31 printf("0\\n"); 32 } 33 else if(b<len_d)//不需要添加后缀0,需要移动小数点,并去掉前缀0 34 { 35 int d_0=0; 36 for(i=0;i<len_d;i++) 37 { 38 if(d[i]!=\'0\') break; 39 if(d[i]==\'0\') d_0++; 40 }//前缀0个数 41 if(b<=d_0)//b <= d的前缀0个数,n<1 42 { 43 printf("0."); 44 for(i=b;i<len_d;i++) printf("%c",d[i]); 45 printf("\\n"); 46 } 47 else//b > d的前缀0个数,n>=1 48 { 49 for(i=d_0;i<b;i++) printf("%c",d[i]); 50 printf("."); 51 for(;i<len_d;i++) printf("%c",d[i]); 52 printf("\\n"); 53 } 54 } 55 else if(b==len_d)//直接去掉小数点,并去掉前缀0 56 { 57 for(i=0;i<len_d;i++) if(d[i]!=\'0\') break; 58 for(;i<len_d;i++) printf("%c",d[i]); 59 printf("\\n"); 60 } 61 else//需要添加后缀0,并且去掉前缀0 62 { 63 for(i=0;i<len_d;i++) if(d[i]!=\'0\') break; 64 for(;i<len_d;i++) printf("%c",d[i]); 65 for(i=1;i<=b-len_d;i++) printf("0"); 66 printf("\\n"); 67 } 68 } 69 else 70 { 71 int i,cnt; 72 for(i=2,cnt=0;;i++,cnt++) 73 { 74 if(num[i]==\'e\') break; 75 d[cnt]=num[i]; 76 } 77 d[cnt]=\'\\0\'; 78 i++; 79 for(cnt=0;num[i];i++,cnt++) b_[cnt]=num[i]; 80 b_[cnt]=\'\\0\'; 81 int len_b=strlen(b_); 82 b=0; 83 for(i=0;i<len_b;i++) b+=(b_[i]-\'0\')*(int)pow(10,(len_b-1-i)); 84 int len_d=strlen(d); 85 if(b<len_d)//不需要添加0,需要移动小数点 86 { 87 printf("%c",num[0]); 88 for(i=0;i<b;i++) printf("%c",d[i]); 89 printf("."); 90 for(;i<len_d;i++) printf("%c",d[i]); 91 printf("\\n"); 92 } 93 else if(b==len_d)//直接去掉小数点 94 { 95 printf("%c",num[0]); 96 for(i=0;i<len_d;i++) printf("%c",d[i]); 97 printf("\\n"); 98 } 99 else//需要添加后缀0 100 { 101 printf("%c",num[0]); 102 for(i=0;i<len_d;i++) printf("%c",d[i]); 103 for(i=1;i<=b-len_d;i++) printf("0"); 104 printf("\\n"); 105 } 106 } 107 } 108 }
以上是关于JNUOJ 1184 - 科学计数法的主要内容,如果未能解决你的问题,请参考以下文章