這個東西特別的好用,能夠直接無條件調到冒號後面的語句,進行操做。ios
舉個例子:c++
#include"bits/stdc++.h" using namespace std; int main() { ios::sync_with_stdio(false);//流輸入輸出,讓cin堪比scanf int a,b,c,d; cin>>a>>b; if(a==b) c=a; else if(a>b) c=b; else goto e; if(c==4) { e: for(int i=1; i; i++) { d+=i; } } cout<<c<<d; return 0; }
1.(針對數據點2)如測試數據0.0000 沒有判斷多個0測試
2.(針對數據點4)如測試數據0000/2414 當是分數的時候,沒有判斷前半部分的多個0spa
3.(針對數據點5)如測試數據1234567890.0987654321 ' . ' 後半部分翻轉後0移到末尾,不該該輸出(但我卻輸出了Q)調試
4.(針對數據點6)如測試數據0/10000 輸出的正確結果應爲0/1,但個人倒是0/00001。code
5.(針對數據點20)如測試數據132000.000 輸出應該爲231.0。個人是231000.0。忘記刪去0。ci
針對以上**錯誤,我調了很長時間……嚶。
#include"bits/stdc++.h" using namespace std; #define N 300 char s[N]; int a[N];//沒任何卵用 int cnt=0;//+1 int flag=0; int main() { cin>>s; int len=strlen(s);//字符串長度 //特判0 if((s[0]=='0' && len==1) /*整數*/) { cout<<0<<"\n"; return 0; }//一個0 /* if((s[0]=='0' && s[1]=='0') ) {//整數 for(int i=0; i<=len-1; i++) if(s[i]=='0') cnt++; if(cnt==(len-1)) cout<<0; return 0; }//多個0 */ cnt=0; if((s[0]=='0' && s[1]=='%')/*百分數*/) { cout<<0<<"%\n"; return 0; }//針對 0% if(s[0]=='0' && s[1]=='0' && len>1) { for(int i=0; i<=len-1; i++) { if(s[i]=='/' || s[i]=='.') { flag=2; } } }//針對相似數據 0000000/2414 for(int i=0; i<=len-1; i++) {//判斷屬於哪一種類型 if(s[i]=='.'||s[i]=='/') flag=2;//小數,分數 } for(int i=0; i<=len-1; i++) { if(s[i]=='%') flag=3;//百分數 } if(flag==0) flag=4;//整數 // cout<<flag<<'\n';//手動調試 if(flag==4) {//整數 cnt=0;//歸零 memset(a,0,sizeof(a));//清空 if(s[len-1]=='0') {//若是翻轉後開頭是0 for(int j=len-2; j>=0; j--) {//從開頭接着往前判斷直到找到第一個不是0的位置 if(s[j]!='0') { for(int i=j; i>=0; i--) cout<<s[i]-'0'; return 0;//直接輸出,結束 } } } if(s[len-1]!='0') { //若是翻轉後開頭不是0 for(int i=len-1; i>=0; i--) cout<<s[i]-'0'; return 0; } } if(flag==3) {//百分數 cnt=0; memset(a,0,sizeof(a));// if(s[len-2]=='0') {//由於是百分數,因此最後一個確定是符號%,直接從倒數第二個開始,len-1是倒數第一個 for(int i=len-3; i>=0; i--) { if(s[i]!='0') {//跟整數的處理差很少 for(int j=i; j>=0; j--) cout<<s[j]-'0'; cout<<s[len-1]; return 0; } } } else { for(int i=len-2; i>=0; i--)// cout<<s[i]-'0'; cout<<s[len-1]; return 0; } } int b; int d=-100;//記錄位置 if(flag==2) {//小數、分數 for(int i=0; i<=len-1; i++) {//從頭開始找'.'和'/' if(s[i]=='.'||s[i]=='/') {//以它爲界限,分紅先後兩部分 b=i; break;//找到就直接退出循環 } } if(s[b-1]=='0' && (b-1==0)) {//若是隻有一個0 cout<<0; goto a;//goto 語句 } else if(s[b-1]=='0') {//多個0 for(int y=b-1; y>=0; y--) { if(s[y]!='0') { d=y;//記錄位置 break; } } if(d==(-100)) goto b;//goto語句,針對此類數據134500000.0000 for(int y=d; y>=0; y--) cout<<s[y];//輸出前半部分 goto a; } b: if(s[b-1]=='0') { for(int j=b-2; j>=0; j--) {//若是存在多個0 if(s[j]=='0') cnt++; } if(cnt==(b-1)) { cout<<0; goto a; } }//再一次針對這種數據 000000000/2414,一個貌似針對不了 if(s[b-1]=='0') {//注意翻轉後開頭是否爲0 for(int j=b-2; j>=0; j--) {//找第一個不是0的位置 if(s[j]!=0) for(int k=j; k>=0; k--) cout<<s[k]; break; } } else if(s[b-1]!='0') {//若是開頭不是0 for(int j=b-1; j>=0; j--) cout<<s[j]; } a: cout<<s[b];//輸出符號 //找符號界限後面的 /* 以符號'.'和'/'爲界限分紅先後兩個部分,(由於它們都位於數字中間,因此能夠將它們歸爲一類) */ cnt=0;//歸零 if(s[len-1]=='0' && (len-1==b+1) ) {//若是隻有一個0 cout<<0; return 0; } else if(s[len-1]=='0') {//若是存在多個0 for(int j=len-2; j>=b+1; j--) { if(s[j]=='0') cnt++; } if(cnt==(len-2-b)) { cout<<0; return 0; } }//針對這種數據 0.000000 cnt=0; int w;//記錄位置 if(s[b+1]=='0') { for(int u=b+2; u<=len-1; u++) { if(s[u]!='0') { w=u; break; } } for(int u=b+1; u<w; u++) { s[u]='\0';//轉換爲空字符 } }//針對這種數據1234567890.0987654321 if(s[len-1]=='0') {//注意翻轉後開頭是否爲0 for(int j=len-2; j>=b+1; j--) { if(s[j]!='0') { /*for(int k=j; k>=b+1; k--) if(s[k]=='0' && s[k+1]=='0' && s[k+2]=='0' && s[k+3]=='0' && s[k+4]=='0') { cout<<" "; return 0; } if(s[k]=='0') { for(int l=k; l>=b+1; l--) if(s[k]=='0') cnt++; if(cnt==(k-b)) { s[k]=' '; } }*/ for(int l=j; l>=b+1; l--) cout<<s[l]; return 0; } } } else if(s[len-1]!='0') { //若開頭不是0 for(int x=len-1; x>=b+1; x--) cout<<s[x]; return 0; } } } //DARLING in the FRANXX