Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2020, 16:20   #1
Vasssya
 
Регистрация: 07.11.2019
Сообщений: 4
По умолчанию Проблема реализации сложения 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);

}
Vasssya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с BigInt Delphi Library. щлот Помощь студентам 5 02.11.2014 22:14
Проблема реализации отскока шарика. g4mer Помощь студентам 0 20.12.2011 21:32
Проблема в реализации метода Хаффмана 77sega77 Общие вопросы Delphi 4 06.05.2011 23:53
Проблема реализации Ivan_32 Свободное общение 19 26.06.2009 08:32