Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > C/C++ > C/C++
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.10.2013, 15:15
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию Длинная арифметика

Я нашёл код, который позволяет складывать два длинных числа длиной до 100 символов. Как сделать так, чтобы можно было складывать два длинных числа длиной до 10000 символов?
Код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
 
#define MAX_NUMBER_LEN 126
 
void input_big_number(char *number);
 
 
void output_big_number(char *number);
 
 
void add_big_numbers(char* sum, const char *a, const char* b);
 
 
int main()
{
    char a[MAX_NUMBER_LEN];
    char b[MAX_NUMBER_LEN];
    char c[MAX_NUMBER_LEN];
 
    memset(a, 0, MAX_NUMBER_LEN);
    memset(b, 0, MAX_NUMBER_LEN);
    memset(c, 0, MAX_NUMBER_LEN);
 

    input_big_number(a);
    input_big_number(b);

    add_big_numbers(c, a, b);
 
    output_big_number(c);
 
    printf("\n");
    getch();
    return 0;
}
 
 
void input_big_number(char *number)
{
    char buffer[MAX_NUMBER_LEN];
    char i, j, k;
 
    fgets(buffer, MAX_NUMBER_LEN, stdin);
 
    if (buffer[strlen(buffer) - 1] != '\n') {
        exit(EXIT_FAILURE);
    }
 
    buffer[strlen(buffer) - 1] = '\0';
 
    k = strlen(buffer) - 1;
    for(i = k; i >= 0 ; i--) {
        number[k - i] = buffer[i] - '0';
    }
}
 
 
void output_big_number(char *number)
{
    char i, j, k;
 
    for(k = MAX_NUMBER_LEN - 1; number[k] == 0 && k > 0; k--);
 
    for(i = k; i >= 0; i--) {
        printf("%d", number[i]);
    }
}
 
 
void add_big_numbers(char* sum, const char *a, const char* b)
{
    char carry = 0;
    char w = 0;
    char t;
    char i, j, k;
 
    for (t = 0; t <= MAX_NUMBER_LEN; t++)
    {
        w = a[t] + b[t] + carry;
        carry = w / 10;
        sum[t] = w % 10;
    }
}
Ответить с цитированием
  #2  
Старый 16.10.2013, 15:36
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Внимательно посмотреть на строку №6 и попытаться понять, что там написано.
Ответить с цитированием
  #3  
Старый 16.10.2013, 16:52
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

А куда такая одуренная точность? Я раньше тоже по этой теме угорал, но дальше тестов дело не дошло.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 16.10.2013, 20:07
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
Внимательно посмотреть на строку №6 и попытаться понять, что там написано.
Я пытался изменить значение 126 на 10000, но это не помогло.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter