杭電1002解答疑問求解(附對和錯的C++程式碼)
阿新 • • 發佈:2019-02-15
這裡是ACM機器編譯不通過的程式碼,求指教為何錯誤了??VC++6.0執行成功
<pre class="cpp" name="code">#include <iostream> #include<string> using namespace std; int main() { int t,s[1002]={0}; string a,b; int L1,L2,LS,LS1=0,n,m,k; /* *t儲存例項的樣例數1-20 *s[1002]儲存陣列 *a,b分別儲存輸入的數字 *L1儲存A數字的長度最後一個元素的下標 *L2儲存B數字的長度最後一個元素的下標 *LS儲存結果數字的最後一個元素的下標 *LS1儲存結果長度,如果進位的話,除了第一位沒包括 *n,m是分別對應位數的數字用於相加 *k儲存數字結果 */ cin>>t; bool flag=false;//判斷是否進位 for(int i=1;i<=t;i++) { cin>>a>>b; L1 = a.length()-1; L2 = b.length()-1; if(L1 == L2) { if((a[0]+b[0]-'0'-'0') >= 10) { LS = (L1>L2)?L1:L2; LS++; } else { LS = (L1>L2)?L1:L2; } } else if(L1 > L2) { LS = L1; } else { LS = L2; } while(L1 >= 0 && L2 >=0) { n=a[L1]-'0'; m=b[L2]-'0'; if((n+m) >= 10) flag=true; else flag=false; if(flag) { k=(n+m)-10; s[LS]+=k; s[--LS]=1; LS1++; if((L1==L2) && L1==0)LS1++; L1--; L2--; } else { k=(n+m); s[LS]+=k; if(s[LS] == 10) { s[LS]=0; s[--LS]=1; } else { s[--LS]=0; } L1--; L2--; LS1++; } } int temp=0; if(L1 < 0) { while(L2 >= 0) { s[LS]+=b[L2]-'0'; if(s[LS] >=10) { if(LS == 0) { temp=1; s[LS]=0; } else { temp=0; s[LS] = 0; s[--LS] = 1; LS++; } } LS--; L2--; LS1++; } } if(L2 < 0) { while(L1 >= 0) { s[LS]+=a[L1]-'0'; if(s[LS] >=10) { if(LS == 0) { temp=1; s[LS]=0; } else { temp=0; s[LS] = 0; s[--LS] = 1; LS++; } } LS1++; LS--; L1--; } } cout<<"Case "<<i<<":"<<endl; cout<<a<<" + "<<b<<" = "; if(temp==1) { cout<<temp; } for(int e=0;e<LS1;e++) { cout<<s[e]; s[e]=0; } cout<<"\n"; if(i == t){} else cout<<"\n"; LS1=0; } return 0; }
這裡是編譯通過的程式碼
#include<iostream> #include<string> using namespace std; int main() { string a,b; int num,sum[1000]; cin>>num; for(int l=0;l<num;l++) { cin>>a>>b; int m=0,n=0,temp=0,i,k; int q=0;//用於記錄sum陣列的長度!! i=a.length(); k=b.length(); i=i-1; k=k-1; while(i>=0 && k>=0) { m=a[i]-'0'; n=b[k]-'0'; sum[q++]=(temp+m+n)%10; temp=(temp+m+n)/10; i--; k--; } if(i>k) { while(i>=0) { m=a[i]-'0'; sum[q++]=(temp+m)%10; temp=(temp+m)/10; i--; } } if(k>i) { while(k>=0) { m=b[k]-'0'; sum[q++]=(temp+m)%10; temp=(temp+m)/10; k--; } } sum[q]=temp; cout<<"Case "<<l+1<<":"<<endl; cout<<a<<" + "<<b<<" = "; if(sum[q]!=0) cout<<sum[q]; for(--q;q>=0;q--) cout<<sum[q]; cout<<endl; if(l<num-1) cout<<endl; } return 0; }
</pre><pre class="cpp" name="code" snippet_file_name="blog_20141120_5_1564528" code_snippet_id="525913">
求告訴第一個程式碼為何不能AC
而第二個程式碼可以AC
兩張都執行正確,而且我執行時結果也都沒見錯誤。