求助:c++高精度加法我是个新手,只用数组编了一个高精度加法的程序,但是基本上每次运行都会出现“内存不能为
求助:c++高精度加法
我是个新手,只用数组编了一个高精度加法的程序,但是基本上每次运行都会出现“内存不能为read”的提示,请高手帮忙修改!(只用数组,不要用string)
- C/C++ code
#include<iostream>using namespace std;int main(){ char c; int a[110],b[110],i1,i2,d[110],i3,e=0; for(i1=0;;i1++){ c=getchar(); if(c=='\n')break; a[i1]=int(c)-48; } for(i2=0;;i2++){ c=getchar(); if(c=='\n')break; b[i2]=int(c)-48; } if(i1>i2){ for(i1=i2;i3>0;i3--) b[i3+i1-i2-1]=b[i3-1]; for(i3=i1-i2;i3>0;i3--) b[i3-1]=0; } if(i2>i1){ for(i2=i1;i3>0;i3--) b[i3+i2-i1-1]=b[i3-1]; for(i3=i2-i1;i3>0;i3--) b[i3-1]=0; i1=i2; } for(i3=i1;i3>0;i3--){ if(a[i3-1]+b[i3-1]>9){ d[i3-1]=(a[i3-1]+b[i3-1])%10+e; e=1; } else{ d[i3-1]=a[i3-1]+b[i3-1]; e=0; } } if(e==1)cout<<1; for(i3=0;i3<i1;i3++) cout<<d[i3]; //system("pause");}[解决办法]
看了一下,明白lz的算法.我认为有几处问题,在代码后说明.
- C/C++ code
#include<iostream>using namespace std;int main(){ char c; int a[110],b[110],i1,i2,d[110],i3,e=0; for(i1=0;;i1++){ c=getchar(); if(c=='\n')break; a[i1]=int(c)-48; } for(i2=0;;i2++){ c=getchar(); if(c=='\n')break; b[i2]=int(c)-48; } if(i1>i2){ for(i1=i2;i3>0;i3--) b[i3+i1-i2-1]=b[i3-1]; for(i3=i1-i2;i3>0;i3--) b[i3-1]=0; } if(i2>i1){ for(i2=i1;i3>0;i3--) b[i3+i2-i1-1]=b[i3-1]; for(i3=i2-i1;i3>0;i3--) b[i3-1]=0; i1=i2; } for(i3=i1;i3>0;i3--){ if(a[i3-1]+b[i3-1]>9){ d[i3-1]=(a[i3-1]+b[i3-1])%10+e; e=1; } else{ d[i3-1]=a[i3-1]+b[i3-1]; e=0; } } if(e==1)cout<<1; for(i3=0;i3<i1;i3++) cout<<d[i3]; //system("pause");}
[解决办法]
总算看明白了,楼主为什么不先把数组全部置零,在输入时直接从数组最后一位开始存数,这样计算时就不用移动整个数组,而输出时只要找到第一个不为零的数就可以了。 