неправильно работает сложение
Подскажите почему может неправильно работать сложение длинных чисел , например если я ввожу 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.