大数求和为啥是segmentation fault
[code=C/C++][/code]
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=30;
int *str2int(char *str)
{
int i,len=strlen(str);
int *a=new int[(len+1)*sizeof(int)];
for(i=0;i<len;i++)
a[i]=(int)str[len-i-1]-48;
return a;
}
int check(int *a,int n)
{
int k=0;
int len=n;
while(a[len-1]==0&&len>1)
len--;
for(k=0;k<len;k++)
{
if(a[k]>=10)
{
a[k+1]=a[k+1]+a[k]/10;
a[k]=a[k]%10;
}
}
if(a[k]!=0) len=k+1;
return len;
}
char *int2str(int *a,int n)
{
int i;
char *str=new char[(n+1)*sizeof(char)];
for(i=0;i<n;i++)
str[i]=(char)a[n-i-1]+48;
str[n]='\0';
return str;
}
char *addition(char *m1,char *m2)
{
int i,len1,len2,len,c=0;
int *t1,*t2;
len1=strlen(m1);
len2=strlen(m2);
len=(len1>=len2)?len1:len2;
t1=new int[(len+2)*sizeof(int)];
t2=new int[(len+2)*sizeof(int)];
t1=str2int(m1);
t2=str2int(m2);
for(i=len1;i<len+1;i++)
t1[i]=0;
for(i=len2;i,len+1;i++)
t2[i]=0;
for(i=0;i<len;i++)
t1[i]=t1[i]+t2[i];
len=check(t1,len);
char *str=new char[(len+2)*sizeof(char)];
for(i=0;i<len;i++)
str[i]=(char)t1[len-i-1]+48;
str[len]='\0';
return str;
}
int main()
{
char s1[maxn],s2[maxn];
while(cin>>s1>>s2)
cout<<addition(s1,s2)<<endl;
return 0;
}
我看看了很久这个程序,始终是出现错误不知道是为啥?各位能帮我指点迷津吗?
[解决办法]
int main(){ char s1[maxn],s2[maxn]; memset(s1, 0, sizeof(s1));//首次定义记得清空 memset(s2, 0, sizeof(s2)); while(cin>>s1>>s2) { cout<<addition(s1,s2)<<endl; memset(s1, 0, sizeof(s1));//再次使用记得清空,这两个地方都会出现strlen错误 memset(s2, 0, sizeof(s2)); } return 0;}
[解决办法]
你的程序比较麻烦,这个程序可以直接运行:
#include <iostream>using std::endl;using std::cout;using std::cin;int main(){ const int size = 50; char s1[size],s2[size]; cout << "please input first s1:"; cin >> s1; cout << "please input second s2:"; cin >> s2; int rsize = (strlen(s1) >= strlen(s2) ?strlen(s1):strlen(s2)) + 2; char *result = new char[rsize]; memset(result,'0',rsize); result[rsize - 1] = '\0'; int k = 0,temp = 0,i,j,m = rsize -2; for(i = strlen(s1) - 1,j = strlen(s2) - 1;i >= 0 && j >= 0; --i,--j) { temp = (s1[i] - '0') + (s2[j] - '0') + k; result[m--] = temp % 10 + '0'; k = temp/10; } if(i < 0 && j >= 0) { while(j >= 0) { temp = s2[j--] - '0' + k; result[m--] = temp % 10 + '0'; k = temp/10; } } else if(i >=0 && j < 0) { while(i >= 0) { temp = s1[i--] - '0' + k; result[m--] = temp % 10 + '0'; k = temp / 10; } } result[m] = k + '0'; cout << " sum:"; if(result[0] == '0') cout << result + 1 << endl; else cout << result << endl; delete []result;}
[解决办法]
segmentation fault是越界,如果不清空,你在strlen的时候会出问题。。。。