2014-02-09 2 views
0
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 не бросает никаких ошибок из этого или чего-либо еще, просто то, где предполагается, что выход должен быть пустым, что оставило меня в тупике. Любая помощь очень ценится !! Просто запомните одну вещь, так как это первая программа из моего класса, я не могу использовать что-либо слишком продвинутое, чтобы решить эту проблему. Спасибо за помощь

+0

Алгоритм не ясен. Для числа 12345 вектор сначала [0] равен 1 или 5? Лучше иметь его 5 (сопоставить индекс цифры в векторе с соответствующей мощностью 10). Более того, длина позиции ваших векторов будет идти в позицию 0 вашего результата ... вы намеренно возвращаете порядок исходных векторов в векторе результата? – sebas

+0

Посмотрите, что цель состояла в том, чтобы я сделал что-то вроде этого: vector1 = 1234 vector2 = 5678, затем добавив их вместе, но причина, по которой я начинаю с 4 вместо 1, - начинать с одной цифры и с десятками цифр добавить перенос, если он есть. Тогда у меня есть функция для изменения числа в конце – NDIrishman23

+0

Если у вас есть эта функция, чтобы отменить номер, сделайте это раньше, чтобы перейти к функции, которую я размещаю ниже, а затем повторю ее после функции. У вас будут векторы в том порядке, в котором вы хотите. – sebas

ответ

0

Я предполагаю, что вы имеете позицию я вектор, связанный с (я-1) -й мощностью 10.

EDITED: теперь он работает и с различными векторами размера

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

Отлично, это работает как шарм, и я должен был все это видеть. Однако как насчет случая, когда числа не имеют одинаковой длины ??? – NDIrishman23

+0

Вы получили бы векторный индекс вне диапазона, если бы вы добавили say 100 и 1000. Также в определенной степени алгоритм имеет недостаток, потому что, скажем, вы добавили 34567 и 34567, вы получите дополнительную цифру в десятитысячном месте. – NDIrishman23

+0

Теперь он должен работать для разных размеров. – sebas

Смежные вопросы