неправильно работает сложение

Подскажите почему может неправильно работать сложение длинных чисел , например если я ввожу 1001 и 27 , то у меня получается 82010 , а если ввожу 1234 и 9567 , то все считает правильно

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int length;
void Out_put(char B[],int size_B)
{
    cout << "B" << endl;
    for (int i = 0; i < size_B; i++)
    {
        cout << B[i];
    }
    cout << endl;
}
void Razn(char A[], char B[], int size_A, int size_B)
{

}
void Summ(char A[], char B[], int size_A, int size_B)
{
    if (size_A > size_B)
        length = size_A + 1;
    else
        length = size_B + 1;
    for (int i = 0; i < length; i++)//символы делаем числами
    {
        A[i] -= '0';
        B[i] -= '0';
    }
    
    for (int ix = 0; ix < length; ix++)
    {
        B[ix] += A[ix]; // суммируем последние разряды чисел
        B[ix + 1] += (B[ix] / 10); // если есть разряд для переноса, переносим его в следующий разряд
        B[ix] %= 10; // если есть разряд для переноса он отсекается
    }

    for (int i = 0; i < length; i++)//делаем обратно символы в массиве
    {
        A[i] += '0';
        B[i] += '0';
    }
}
int main()
{
    //начальные числа
    string digit_A, digit_B;

    //массивы для длинной арифметики
    char A[300] , B[300];
    for (int i = 0; i < 300; i++) //заполняем оба массива нулями символами
    {
        A[i] = '0';
        B[i] = '0';
    }
    //ввод чисел
    cout << "Enter the number A" << endl;
    cin >> digit_A;
    cout << "Enter the number B" << endl;
    cin >> digit_B;

    //размеры строк
    int size_A = digit_A.size();
    int size_B = digit_B.size();

    //зеркальное копирование элементов из строк в массивы char
    for (int i = digit_A.size() - 1; i >= 0; i--)
        A[digit_A.size() - 1 - i] = digit_A[i];
    for (int i = digit_B.size() - 1; i >= 0; i--)
        B[digit_B.size() - 1 - i] = digit_B[i];

    Summ(A, B, size_A, size_B);
    Out_put(B,length);
    
    

    return 0;
}


Ответы (1 шт):

Автор решения: maestro

Перед сложением вы переворачиваете числа так, чтобы младший разряд оказался впереди. Но после сложения вы забыли обратно перевернуть результат.

1234+9567=10801 - симметричное число.

1001+27=1028 - результат правильный, просто надо перевернуть.

И ещё - если на последнем разряде не было переноса, то надо уменьшить длину на 1.

→ Ссылка