Проблема реализации сложения BigInt
При вводе числа больше чем 7 символов программа работает неверно. В чем проблема? Что нужно исправить? (Можете указать?) Вот фрагмент:
#include <iostream>
using namespace std;
void InPutBigInt(char c[]);
void OutPutBigInt(int c[]);
void SumBigInt(int a[], int b[]);
const int n = 30;
int d[n + 1] = { 0 };
int length = n;
int main()
{
int a[n + 1] = { 0 }, b[n + 1] = { 0 };
char c[n + 2];
char symbol = '0';
cout << "Введите первое число: ";
cin >> c;
InPutBigInt(c);
memcpy(a, d, sizeof(a));
memset(d, 0, _countof(d));
cout << "Введите знак ариф. действия: ";
cin >> symbol;
cout << "Введите второе число: ";
cin >> c;
InPutBigInt(c);
memcpy(b, d, sizeof(b));
cout << "Результат: ";
repeat: switch (symbol)
{
case '+':
SumBigInt(a, b);
break;
/* кусок кода, который не используется */
}
system("pause");
}
void InPutBigInt(char c[])
{
int sign = 1, pos = 0;
if (c[0] == '-' || c[0] == '+')
{
sign = (c[0] == '+' ? 1 : -1);
pos = 1;
}
int size = strlen(c) - 1;
if (c[size - 1] == '0')
size--;
for (int i = 0; size >= pos; )
{
d[i++] = c[size--] - '0';
}
}
void OutPutBigInt(int c[])
{
cout << endl;
for (int i = n; i >= 0; --i)
{
cout << c[i];
}
}
void SumBigInt(int a[], int b[])
{
int size_a = (sizeof(a) / sizeof(*a)), size_b = ( sizeof(b) / sizeof(*b) );
if (size_a > size_b)
length = size_a + 1;
else
length = size_b + 1;
for (int i = 0; i <= length; ++i)
{
b[i] += a[i];
b[i + 1] += (b[i] / 10);
b[i] = b[i] % 10;
}
if (b[length - 1] == 0)
length--;
cout << endl;
OutPutBigInt(b);
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
У вас тут
void SumBigInt(int a[], int b[])
{
int size_a = (sizeof(a) / sizeof(*a)), size_b = ( sizeof(b) / sizeof(*b) );
ерунда получается. Вы передаете указатель, и size(a) - размер не массива, а указателя. Смотрите сами.