|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Длинная арифметика
Я нашёл код, который позволяет складывать два длинных числа длиной до 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
|
|||
|
|||
Внимательно посмотреть на строку №6 и попытаться понять, что там написано.
|
#3
|
||||
|
||||
А куда такая одуренная точность? Я раньше тоже по этой теме угорал, но дальше тестов дело не дошло.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
Цитата:
|