【PAT-A】1073. Scientific Notation 寫題記錄
阿新 • • 發佈:2018-12-20
寫題的時候沒看見整數部分從1-9,考慮了0的情況,寫了很多版本,選了個最精簡的。
#include <cstdio> #include <cstring> int main(){ char input[10010]; scanf("%s",&input); input[strlen(input)]='\0'; int locE=1; while(input[locE]!='E'){ //找到E的座標locE locE++; } int p=0,i=locE+2; while(input[i]!='\0'){ //獲取指數 p=p*10+(input[i++]-'0'); } if (input[0]=='-') printf("-"); if (input[locE+1]=='-'){ //若p為-,則不管整數是否0都是加往前加0 printf("0."); for (int i=1;i<p;i++){ printf("0"); } for(int i=1;i<locE;i++){ if (input[i]!='.') printf("%c",input[i]); } } else{ //如果整數部分是0 int num=1; if (input[1]=='0'){ //計算開頭連續0的個數 for (int i=3;i<locE;i++){ if (input[i]=='0') num++; else break; } } for (int i=1;i<locE;i++){ //確定小數點,能點就點 if (input[i] == '.') continue; //如果遇到小數點,直接下一個 else if (input[1]=='0' && i<num+2 && i<p+3) ; //如果整數是0,i還在小數點之前的連續0中,那就不做動作 else printf("%c",input[i]); //否則輸出 if (i == p+2 && i<locE-1) { //如果到了該點小數點處,並且不在末尾 if (input[1]=='0' && i<num+2) printf("0."); //如果整數為0,小數點要點在連續0中,就加0. else printf("."); //否則直接加點 } } for (int i=0;i<p-locE+3;i++) printf("0"); //有多餘的0的話輸出 } return 0; }