自己去查过了,说是可能出现了野指针,但是我自己看了很久没有发现(可能我对野指针的概念本来就不是很清晰)。如果大神们有空就帮我看一看代码哪儿错了。如果没时间就告诉一下line1017是什么意思呢?第一次问问题就发整个代码,不好意思。
#include<iostream> #include<cstring> using namespace std; class biginteger { int *ma; int len; public: biginteger(char *); char* operator +(biginteger n); char* operator -(biginteger n); char* operator*(biginteger n); int operator==(biginteger n); int operator!=(biginteger n); int operator>=(biginteger n); int operator>(biginteger); int operator<(biginteger); int operator<=(biginteger); ~biginteger(){delete []ma;}; }; biginteger::biginteger(char*a) { int n=strlen(a),i; len=n; ma=new int[n]; for(i=0;i<n;i++) ma[i]=*(a+n-i-1)-'0'; } char*biginteger::operator +(biginteger n) { int i,t,temp=0; int max=(len>n.len?len:n.len); //int min=(len>n.len?n.len:len); int b[1000]={0}; for(i=0;i<len;i++)b[i]=ma[i]; for(i=0;i<n.len;i++) { t=n.ma[i]+b[i]+temp; if(t>9) b[i]=t-10; else b[i]=t; temp=t/10; } if(temp) b[i]+=temp; char *p=new char[max+1]; for(i=0;i<max;i++) p[max-1-i]=b[i]+'0'; p[max]=0; return p; } char*biginteger::operator -(biginteger n) { int leap=0,i,b[1000]; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) {leap=1;break;} if(n.ma[i]<ma[i]){leap=2;break;} } if(i==-1) leap=3; } int temp=0,t=0; if(n.len>len||leap==1) { for(i=0;i<len;i++) {t=n.ma[i]-ma[i]-temp; if(t<0) {b[i]=t+10;temp=1;} else {b[i]=t,temp=0;} } for(i=len;i<n.len;i++) {t=n.ma[i]-temp; if(t<0){b[i]=t+10;temp=1;} else {b[i]=t,temp=0;} } } if(n.len<len||leap==2) { for(i=0;i<n.len;i++) {t=ma[i]-n.ma[i]-temp; if(t<0) {b[i]=t+10;temp=1;} else {b[i]=t;temp=0;} } for(i=n.len;i<len;i++) {t=ma[i]-temp; if(t<0) {b[i]=t+10;temp=1;} else {b[i]=t;temp=0;} } } int max=(n.len>len?n.len:len); char*p=new char[max]; if(leap==3){p[0]='0';p[1]=0;return p;} if(b[max-1]==0) max-=1; for(i=0;i<max;i++) p[max-1-i]=b[i]+'0'; p[max]=0; return p; } char* biginteger::operator *(biginteger n) { int s=0,j,t,k,temp=0,i,b[1000][100]={0},m,*h; if(n.len<len) { m=n.len; h=n.ma; n.len=len; n.ma=ma; len=m; ma=h; } int max=len+n.len; for(i=0;i<n.len;i++) { for(j=0;j<i;j++) b[i][j]=0; for(j=i;j<len+i;j++) { t=n.ma[i]*ma[j-i]+temp; if(t>9) {b[i][j]=t%10;temp=t/10;} else {b[i][j]=t;temp=0;} } if(temp) b[i][j]=temp; } /* for(i=0;i<n.len;i++) { for(j=0;j<max;j++) cout<<b[i][j]<<" "; cout<<"i="<<i<<endl; }*/ temp=0; for(j=0;j<max;j++) { s=temp; for(i=0;i<n.len;i++)s+=b[i][j]; if(s>9) {b[n.len][j]=s%10;temp=s/10;} else {b[n.len][j]=s;temp=0;}////////// } if(temp) {b[n.len][j]=temp;} for(i=j;i>0&&b[n.len][i]==0;i--) j--; j+=1; char*p=new char[j+1]; for(k=0;k<j;k++) { p[j-k-1]=b[n.len][k]+'0'; } if(p[0]=='0') p[1]=0; p[j]=0; return p; } int biginteger::operator==(biginteger n) { int i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) return 0; if(n.ma[i]<ma[i])return 0; } if(i==-1) return 1; } if(n.len>len)return 0; if(n.len<len)return 0; } int biginteger::operator!=(biginteger n) { int leap=0,i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) {leap=1;return 1;} if(n.ma[i]<ma[i]){leap=2;return 1;} } if(i==-1) return 0; } return 1; } int biginteger::operator>=(biginteger n) { int i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) return 0; if(n.ma[i]<ma[i])return 1; } if(i==-1) return 1; } if(len>n.len)return 1; if(len<n.len)return 0; } int biginteger::operator>(biginteger n) { int i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) return 0; if(n.ma[i]<ma[i])return 1; } if(i==-1) return 0; } if(len>n.len)return 1; if(len<n.len)return 0; } int biginteger::operator<(biginteger n) { int i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) return 1; if(n.ma[i]<ma[i])return 0; } if(i==-1) return 0; } if(len<n.len)return 1; if(len>n.len)return 0; } int biginteger::operator<=(biginteger n) { int i; if(n.len==len) { for(i=len-1;i>=0;i--) { if(n.ma[i]>ma[i]) return 1; if(n.ma[i]<ma[i])return 0; } if(i==-1) return 0; } if(len<n.len)return 1; if(len>n.len)return 0; } int main() { char a[1000],b[1000],op[2]="+"; while(cin>>a>>op>>b) { biginteger s1(a),s2(b); if(op[1]==0) { char*p=0; if(op[0]=='+'){ p=(s1+s2);cout<<p<<endl; delete[]p;} if(op[0]=='-'){p=(s1-s2);cout<<p<<endl; delete[]p;} if(op[0]=='*'){p=(s1*s2);cout<<p<<endl; delete[]p;} if(op[0]=='>'){cout<<(s1>s2)<<endl;} if(op[0]=='<'){cout<<(s1<s2)<<endl;} } if(op[1]=='=') { if(op[0]=='=')cout<<(s1==s2)<<endl; if(op[0]=='>')cout<<(s1>=s2)<<endl; if(op[0]=='<')cout<<(s1<=s2)<<endl; if(op[0]=='!')cout<<(s1!=s2)<<endl; } } return 0; }