所以我创建了一个程序,用字符串总结两个“大整数”(大于普通的长整数)。问题是,当我运行程序时,我输入两个字符串,它甚至输出正确的结果,但然后打开“BigIntegers.exe已停止工作”窗口。当我在控制台的末尾关闭它时,它会显示“Process returns 0xC0000005”。
#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;
}
答案 0 :(得分:2)
请发消息,检查一下你的问题。错误0xc0000005是关于“内存访问冲突”,这是因为你在许多地方超出了字符串限制。例如,下一个:
for(i=0; i<=maxS; i++)
它从0到maxS,但你的字符串从0到(maxS - 1)。在您尝试读取位置c [maxS]时,您是一个入侵记忆。
答案 1 :(得分:0)
#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]=1;//<---------Here it is, before it was c[i]=0; c[i]+=save;
}
}
//cout<<c.size()<<endl;
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;
}