Печатает лишний ноль
Проблема в том , что в функции 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)