Сделал все, кроме вычисления суммы:Написать программу, считывающую с клавиатуры два положительных целых числа длиной не более 20 знаков и выводящую их сумму. Эта программа считывает цифры как значения типа char. После прочтения всего числа символы заменятся значениями типа int. Цифры записываются в массив, и после их ввода с клавиатуры имеет смысл заменить порядок элементов этого массива обратным.
Программа должна выполнять сложение тем же способом, каким вы складываете числа на бумаге. Полученный результат необходимо записать в массив размером в 20 элементов, после чего вывести на экран. Если результат сложения будет содержать более 20 цифр, программа должна вывести сообщение о «переполнении разрядной сетки».
Код: Выделить всё
#include <iostream>
#include <cctype>
const int ARRAY_SIZE = 20;
struct digit
{
int integer[ARRAY_SIZE];
char letter[ARRAY_SIZE];
};
void fill_array(digit& a, int size, int& number_used);
int digit_to_int(char c);
void sort(int a[], int number_used);
//.......
void fill_array(digit& a, int size, int& number_used)
{
int index = 0;
char symbol;
std::cout << "Enter up to 20 digits (to end line enter nondigit symbol):\n";
std::cin >> symbol;
while((isdigit(symbol)) && (index < ARRAY_SIZE))
{
a.letter[index] = symbol;
index++;
std::cin >> symbol;
}
number_used = index;
for(index = 0; index < number_used; index++)
{
a.integer[index] = digit_to_int(a.letter[index]);
}
}
int digit_to_int(char c)
{
return(int(c) - int('0'));
}
void sort(int a[], int number_used)
{
int start_ind = 0, end_ind = number_used-1, temp;
while((start_ind < end_ind) && (start_ind != end_ind))
{
temp = a[start_ind];
a[start_ind] = a[end_ind];
a[end_ind] = temp;
start_ind++;
end_ind--;
}
}
- Сложение массивов разной длины (скажем размеры [4] и [5]).
- Определение, когда прекратить считать (особенно, если массивы разной длины).
- Как я понимаю, то сумма будет выглядеть следующим образом: c[index] += (a[index] + b[index]). Тогда возвращаемся к п.1 и п.2.
- Как я понимаю, помимо итогового массива размером в 20 элементов, нужна переменная-счетчик, которая будет считать кол-во сложенных элементов. Если массив a и b содержат по 20 элементов, то счетчик будет равен 21 (и соответственно выдаст ошибку о переполнении), если сумма последних элементов будет > 9.
- Переменная-счетчик также нужна, чтобы обрезать массив, перед его выводом (выводить безе обратной сортировки - лишние действия ни к чему).
- Возможно есть смысл чтобы структура содержала сразу 2 числа, дабы упростить некоторые функции.
Пока вышло следующее (допустим что массивы a и b содержат значения 1234):
Код: Выделить всё
void sum(int a[], int a_size, int b[], int b_size)
{
using namespace std;
int c[20] = {0}, index, counter = 0;
for(index = 0; index < a_size; index++)
{
c[index] += (a[index] + b[index]);
counter++;
}
for(index = counter-1; index >=0; index--)
{
cout << c[index];
}
cout << endl;
}