Проблема реализации сложения 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) - размер не массива, а указателя. Смотрите сами.

→ Ссылка