这是代码片段,或者是一个函数,该函数将两个字符串作为输入,这些输入基本上是大整数,并打印出它们的总和。我得到的总和正确打印了,但是最后出现了分段故障,我无法弄清楚其来源。
string sum(string x, string y) {
bool carry = false;
int yLen = y.length(), xLen = x.length();
vector<char> s;
for(int i = xLen - 1, j = yLen - 1; i >= 0, j >= 0; i--, j--) {
int a = x[i] - '0', b = y[j] - '0';
int c = (carry?(a+b+1):(a+b));
if(c/10) carry = true, c %= 10;
else carry = false;
s.push_back(c + '0');
}
for(int i = xLen - yLen - 1; i >= 0; i--) {
int a = x[i] - '0';
int c = (carry?(a+1):(a));
if(c/10) carry = true, c %= 10;
else carry = false;
s.push_back(c + '0');
}
reverse(s.begin(), s.end());
for(vector<char>::iterator i = s.begin(); i != s.end(); i++) cout<<*i;
cout<<endl;
}
更新:假设x.length()总是大于输入本身中的y.length()。
您的功能返回string
。
您需要返回字符串,或将其更改为void
。
void sum(string x, string y) {
不在价值返回函数中返回是不确定的行为,可能是您分割错误的原因。
此循环语句
for(int i = xLen - 1, j = yLen - 1; i >= 0, j >= 0; i--, j--) {
已经错了。
循环中的第二个表达式
i >= 0, j >= 0
是逗号操作员的表达。它不考虑我可能小于0。表达式的值是条件j> = 0的值。因此,如果XLEN小于ylen。
您应该重写此循环。我认为你的意思是
i >= 0 && j >= 0