PAT B1024
啊啊啊啊啊啊啊啊这个题卡了一天终于过了啊!!!
几个注意事项,首先,
在后面指数为正数的情况下,需要考虑到前面可能是多0的,比如+0.01E+03,前面0要去掉
还有就是在指数补完数量正好的情况下,这时候要把末尾小数点去掉,比如+1.23E+02,不判定的话就是123.
而在指数为负的情况下还要考虑补0
注意在提交的时候去掉自己写的printf
#include<stdio.h> #include<string.h> int main() { char str[100000]; while(scanf("%s",str)!=EOF) { int e,symbol1,symbol2; int len=strlen(str); if(str[0]=='+') symbol1=1; else symbol1=2; for(int i=2;i<=len-1;i++) { if(str[i]=='E') { e=i; break; } } if(str[e+1]=='+') symbol2=1; else symbol2=2; int up=e+2; while(str[up]=='0') up++; int count=1; int ans=0; int temp[10005]; int tempnum=0; while(up<=len-1) { temp[tempnum++]=str[up]-'0'; up++; } for(int i=tempnum-1;i>=0;i--) { ans+=count*temp[i]; count=count*10; } //printf("symbol1:%d,e:%d,symbol2:%d,ans:%d\n",symbol1,e,symbol2,ans); if(symbol2==1) { int zero=1; if((ans+3)<e) { for(int i=2;i<=1+ans;i++) str[i]=str[i+1]; /*for(int i=e-1;i>ans+2;i--) str[i+1]=str[i];*/ str[ans+2]='.'; if(str[0]=='-') printf("-"); while(str[zero]=='0') zero++; if(str[zero]=='.') zero--; for(int i=zero;i<e;i++) printf("%c",str[i]); printf("\n"); } else if(ans+3==e) { for(int i=2;i<=1+ans;i++) str[i]=str[i+1]; //str[ans+2]='.'; if(str[0]=='-') printf("-"); while(str[zero]=='0') zero++; if(str[zero]=='.') zero--; //printf("zero:%d\n",zero); for(int i=zero;i<e-1;i++) printf("%c",str[i]); printf("\n"); } else { for(int i=2;i<=e-2;i++) str[i]=str[i+1]; for(int i=e-1;i<=ans+1;i++) str[i]='0'; if(str[0]=='-') printf("-"); while(str[zero]=='0') zero++; if(str[zero]=='.') zero--; for(int i=zero;i<=ans+1;i++) printf("%c",str[i]); printf("\n"); } } else { for(int i=e-1+ans;i>=ans+3;i--) str[i]=str[i-ans]; str[ans+2]=str[1]; str[1]='0'; str[2]='.'; for(int i=1;i<=ans-1;i++) str[2+i]='0'; if(str[0]=='-') printf("-"); for(int i=1;i<=e-1+ans;i++) printf("%c",str[i]); printf("\n"); } } return 0; }