c++ - 添加两个表示为字符串的大数字的段错误

标签 c++ string algorithm biginteger

这是代码片段或者更确切地说是一个函数,它将两个字符串作为输入,这两个字符串基本上是大整数并打印它们的总和。我得到了正确打印的总和,但最后出现了段错误,我无法找出它的来源。

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) {

Not returning in a value-returning function is undefined behaviour并且可能是您的段错误的原因。

关于c++ - 添加两个表示为字符串的大数字的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21357098/

相关文章:

c++ - 为 Windows 开发音乐应用程序

javascript - json stringify 结果获取特定键上的值

检查子字符串是否存在于 C 中的字符串中

c++ - C++ DFS 中的迷宫回溯算法?

c++ - 使用 Boost Dijkstra 和指定的 MAX DISTANCE 查找最短路径

c++ - _Get_unwrapped 的含义?

c++ - 使用带有 python 的 DLL(使用 ctypes),不工作

c# - 在字符串中搜索子字符串

c - 桶排序+插入排序算法中的段错误

algorithm - 在未排序的数组中找到一对数字,其总和最接近任意目标