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

时间:2014-02-09 00:12:42

标签: c++ vector

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;
}

嘿,伙计们,你们都帮了我几次,我希望你们能再为我做同样的事情。所以这个函数在C ++程序中的目的是从两个带有数字的向量中取出,从大数字中取出,然后将它们加在一起,最后创建一个向量,并从函数返回。但是,我遇到了这个问题,我无法判断这是否与我实际添加的方式有问题,或者我是否在某些方面将其打印出来。

我创建了另一个函数来获取由数字组成的向量并将其转换为字符串以作为输出打印出来,我知道这个函数有效,因为它在我的程序中运行很多。所以我确信这个功能正在发生,导致我无法打印。但是,Visual Studio不会从它或任何东西中抛出任何错误,只是输出应该是空白的,这让我感到难过。任何帮助是极大的赞赏!!记住一件事,因为这是我班上的第一个程序,我不能使用任何太高级的东西来解决这个问题。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我假设你的向量的位置i与10的(i-1)次幂相关联。

已编辑:现在它也适用于不同大小的载体

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;
}