所以我創建了一個程序,用字符串總結兩個「大整數」(比正常長的長)。問題是,當我運行該程序時,我輸入了兩個字符串,它甚至輸出正確的結果,但隨後打開「BigIntegers.exe已停止工作」窗口。當我在控制檯的末尾關閉它時,它會顯示「進程返回0xC0000005」。使用字符串時C++崩潰
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string a, b;
string c;
int save=0;
cin>>a>>b;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int minS=min(a.size(), b.size());
int maxS=max(a.size(), b.size());
int i;
bool flag=true;
for(i=0; i<=maxS; i++){
if(i<minS){
c[i]=(a[i]+b[i]-2*int('0')+save)%10;
save=int(a[i]+b[i]-2*int('0')+save)/10;
}else if(i>=minS&&i<maxS){
if(a.size()>b.size()){
c[i]=(a[i]+save-int('0'))%10;
save=int(a[i]+save-int('0'))/10;
}
else{
c[i]=(b[i]+save-int('0'))%10;
save=int(b[i]+save-int('0'))/10;
}
}else{
if(save==0) flag=false;
else {c[i]=0; c[i]+=save;}
}
}
if(flag == false){
for(int i=maxS-1; i>=0; i--){
cout<<int(c[i]);
}
}else{
for(int i=maxS; i>=0; i--){
cout<<int(c[i]);
}
}
return 0;
}
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
你可以(也會!)超出你的字符串範圍。請記住,由於數組,矢量和字符串索引都是從零開始的,所以最上面的索引是'size - 1'。你的循環不尊重這一點。 –
對不起,然後。 –