16
Окт
2013

Длинная арифметика (сложение)

Я нашёл код, который позволяет складывать два длинных числа длиной до 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;
    }
}

Источник: https://ru.stackoverflow.com/questions/262681/%D0%94%D0%BB%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F-%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%B0-%D1%81%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Тебе может это понравится...

Добавить комментарий