C++ 向量返回/加法算法的问题

C++ 向量返回/加法算法的问题,c++,vector,C++,Vector,嘿,伙计们,你们都帮了我好几次,我希望你们能再次为我做同样的事情。这个函数在C++程序中的目的是从两个向量中取数字,从大数中取出来,并把它们相加,最后用一个向量创建一个向量,从函数中返回。然而,我对此有一个问题,我不知道这是否是我实际添加的方式的问题,或者我是否以某种方式将它们打印出来 我创建了另一个函数,将一个由数字组成的向量转换成字符串作为输出输出输出,我知道这个函数很有效,因为它在整个程序中都很有效。所以我确信这个函数有问题,导致我无法打印。然而,VisualStudio并没有抛出任何错误

嘿,伙计们,你们都帮了我好几次,我希望你们能再次为我做同样的事情。这个函数在C++程序中的目的是从两个向量中取数字,从大数中取出来,并把它们相加,最后用一个向量创建一个向量,从函数中返回。然而,我对此有一个问题,我不知道这是否是我实际添加的方式的问题,或者我是否以某种方式将它们打印出来


我创建了另一个函数,将一个由数字组成的向量转换成字符串作为输出输出输出,我知道这个函数很有效,因为它在整个程序中都很有效。所以我确信这个函数有问题,导致我无法打印。然而,VisualStudio并没有抛出任何错误或任何东西,只是输出应该在哪里被保留为空白,这让我感到困惑。非常感谢您的帮助!!记住一件事,因为这是我班上的第一个程序,所以我不能用太高级的东西来解决这个问题。感谢您的帮助

我假设您拥有与I-1次方10相关联的向量的位置I

编辑:现在它也适用于不同大小的向量

vector<int> add_vectors(const vector<int> &first, const vector<int> &second){
    vector<int> result;
    int length = 0;
    int carry = 0;
    int firsts_size = first.size();
    int seconds_size = second.size();

    if (firsts_size >= seconds_size){
        int length = firsts_size;
    }
    else{
        int length = seconds_size;
    }

    for (int i = length - 1; i >= 0; i--){
        int digit_sum = first[i] + second[i] + carry;
        if (digit_sum > 9){
            carry = ((digit_sum / 10) % 10);
        }
        result.push_back(digit_sum);
    }
    return result;
}

算法不清楚。对于数字12345,第一个向量[0]是1还是5?最好让它5将向量中数字的索引与各自的幂10相关联。此外,向量的位置长度将转到结果的位置0。。。你是故意还原结果向量中原始向量的顺序吗?看,我的目的是这样做的:vector1=1234 vector2=5678,然后将它们相加,但我从4开始而不是从1开始的原因是从1开始,如果有进位,则在10位加进位。然后我有一个函数在末尾反转数字如果你有这个函数反转数字,在转到下面我发布的函数之前做,然后在函数之后再做一次。你将按照你想要的顺序得到向量。太好了,这就像一个符咒,我应该一直看到它。但是,如果数字的长度不一样呢???如果你加上100和1000,你会得到一个向量下标超出范围的错误。在某种程度上,该算法也有缺陷,因为假设你将34567和34567相加,你会在第千位得到一个额外的数字。在上面的算法中,对于向量的位置0,我有一个数字,对于位置1,我有十个数字,…修改后的代码是否有错误,因为当你到达ifdigit\u sum>9行时,数字和未定义。或者我在这里遗漏了什么?它已在ifi>=长度中定义
vector<int> add_vectors(const vector<int> &first, const vector<int> &second){
vector<int> result;
int length = 0;
int carry = 0;
int firsts_size = first.size();
int seconds_size = second.size();
int digit_sum = 0;

if (firsts_size >= seconds_size){
    length = firsts_size; // int here is not necessary
}
else{
    length = seconds_size; // int here is not necessary
}

for (int i = 0, i<lenght; i++){
    if (i>=lenght){
        if (i>=firsts_size){
            digit_sum = second[i] + carry;
        }
        else{ 
            digit_sum = first[i] + carry;
        }
    }
    else{ 
        digit_sum = first[i] + second[i] + carry;
    }
    if (digit_sum > 9){
        carry = 1; // carry will be no mor than 1 adding two numbers
        digit_sum = digit_sum - 10;
    }
    else{
    carry = 0; 
    }
    result.push_back(digit_sum);
}
if (carry > 0){
    result.push_back(carry);
}
return result;
}