Печатает лишний ноль

Проблема в том , что в функции summ компилятор не заходит в if и в итоге при печати появляется лишний ноль , в чем может быть причина ? P.S значение length удовлетворяет if'у

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int length=0;
void Out_put(char B[],int length)
{
    cout << "B" << endl;
    for (int i = length-1; i >=0; --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)
{
    cout << "Summ length" << length << endl;
    if (size_A > size_B)
        length = size_A + 1;
    else
        length = size_B + 1;
    cout << "Summ length" << length << endl;
    for (int i = 0; i < length-1; i++)//символы делаем числами
    {
        A[i] -= '0';
        B[i] -= '0';
    }
    
    for (int ix = 0; ix < length-1; ix++)
    {
        B[ix] += A[ix]; // суммируем последние разряды чисел
        B[ix + 1] += (B[ix] / 10); // если есть разряд для переноса, переносим его в следующий разряд
        B[ix] %= 10; // если есть разряд для переноса он отсекается
    }

    for (int i = 0; i < length-1; i++)//делаем обратно символы в массиве
    {
        A[i] += '0';
        B[i] += '0';
    }
    cout << B[0] << B[1] << B[2] << B[3] << B[4] << B[5];
    cout << "Summ length" << length << endl; 
    if (B[length - 1] == 0){ length--; }
    cout << "Summ length" << length << endl;
}
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 шт):

Автор решения: Максим Фисман

У вас в массиве B хранятся char'ы. Вы сами пишите, что переводите числа в символы в третьем цикле в функции Summ. Соответственно в следующем условии вы должны сравнивать с символом, а не с числом:

if (B[length - 1] == '0'){ length--; }

Помните, что если вы сравниваете символ с числом, то будет сравниваться не значение этого символа, приведенное к типу данных int, а номер этого символа в кодировке, обычно ASCII, с числом. Пример:

char a = 'M', b = '5';
cout << (a==77) << " " << (b==53);

Вывод:

1 1 // (т.е. 'M'==77, '5'==53)
→ Ссылка