2014-10-30 3 views
0

Я работаю над этим весь день, но просто не могу получить выход правильно. Что я хочу сделать, это ввести два числа, которые будут помещены в два массива, чтобы мы могли их вычесть или добавить и отобразить результат. Кажется простым, но есть несколько улововСложение и вычитание массивов

  1. Вход должен быть помещен в массив от пользователя один за другим.
  2. В случае, если я не укажу значение, код должен считать его '0' или 'null'. '0' если его в начале и 'null' если его в конце. например, если 1-й номер 234, а второй номер 23, тогда код должен сделать его '023', и если я введу первый номер как 2, второй номер 3, но ничего не вводить в конце, тогда код должен считать его null.

Проблемы

  1. Я не могу принять «перенос» к следующему набору, в случае, если сумма превышает 10. Это означает, что значение, которое я получаю, просто добавление двух чисел, не имеет значения, если оно больше 10 или нет. например, добавление 234 и 890 дает мне [10, 12, 4]

Вот код .....

#include<iostream> 
using namespace std; 

main() { 
    int first[10], second[10], result[10], c, n; 

    cout << "Enter the number of elements in the array "; 
    cin >> n; 
    if (n > 10 || n < 0) { 
     std::cout << "invalid number, you are a bad reader" << endl; 
     system("PAUSE"); 
     return 0; 
    } 

    cout << "Enter elements of first array " << endl; 

    for (c = 0; c < n; c++) { 
     cin >> first[c]; 
     if (first[c] > 9 || first[c] < 0) { 
      std::cout << "invalid number, you are a bad reader" << endl; 
      system("PAUSE"); 
      return 0; 
     } 

    } 
    cout << "Enter elements of second array " << endl; 

    for (c = 0; c < n; c++) 
     cin >> second[c]; 

    cout << "Sum of elements of two arrays " << endl; 

    for (c = 0; c < n; c++) 
     cout << first[c] + second[c] << endl; 

    if ((first[c] + second[c]) > 9) { 
     cout << "overflow" << endl; 
    } 

    //result[c] = first[c] + second [c]; 
    //cout << result[c] <<endl; 
    system("PAUSE"); 
    return 0; 
} 

Я был бы очень признателен некоторые предложения.

+1

Я не понимаю, в чем часть не вводить значение. –

+0

Это означает, что когда программа спрашивает меня, введите значение, и я ничего не вводил и просто нажимаю Enter, тогда он должен считать, что он равен 0 или null. Извините за путаницу –

+0

Подсказка: вы можете использовать '[c - 1]', чтобы помочь с обработкой переноса. –

ответ

1

В случае, если вы намерены получить результат, например,

234 + 890 = 1124 

тогда ваш цикл суммирования должен быть в обратном порядке. (Поскольку вы читаете количество элементов массива из приглашения, вы можете использовать эту информацию для ввода первых/вторых чисел в каждый массив в порядке, предпочтительном для следующего цикла суммирования.)

Для проблемы переноса, вам нужно настроить переменную и использовать ее, например, в цикле.

int sum[10] = {0}; 
int c; 

int carry = 0; 
for (c = 0; c < n; c++) 
{ 
    sum[c] = first[c] + second[c] + carry; 
    carry = sum[c]/10; 
} 
if (c < n) 
    sum[c] = carry; 
else 
    cout << "overflow"; 
0

Используйте std :: vector и узнайте, как использовать обратные итераторы. Поэтому, если кто-то вводит 234, вы push_back (2), push_back (3), push_back (4) и имеете [0] = 2, [1] = 3, [2] = 4. Тогда, если следующее число равно 23, вы [0] = 2, [1] = 3. Теперь идем по обоим векторам с обратными итераторами, поэтому первый вызов rbegin() даст указатель на [2] = 4, а другой вектор даст [1] = 3. Теперь добавьте и переносите с помощью push_back в третий вектор, чтобы сохранить результат. Выведите результат, используя обратные итераторы, чтобы распечатать результат.

Это выглядит как домашнее задание, поэтому нет образца кода.