Я только что закончил свой экзамен во вводном курсе C около 20 минут назад. Первый вопрос на экзамене заставил меня немного отвлечься от страха и привлек к разнице двух больших чисел.Вычитание большого количества в C
Целью было взятие двух структур (N1 и N2) по значению и сохранение разности в структуре, переданной посредством ссылки (N3). Нам разрешили предположить, что N3 был начат со всех «0». Размер MAX может быть любым, поэтому решение по-прежнему должно работать, если цифры более 100 цифр.
Вот базовый код (оригинал может немного отличаться, это из памяти)
#include <stdio.h>
#include <stdlib.h>
/* MAX can be any length, 10, 50, 100, etc */
#define MAX 10
struct bignum
{
char digit[MAX];
char decimaldigit[MAX/2];
};
typedef struct bignum bigNum;
void difference(bigNum, bigNum, bigNum *);
/*
Original values in N1 and N2
N1.digit = { '0', '0', '0', '5', '4', '8', '2', '0', '9', '0'};
N1.decimaldigit { '0', '0', '0', '4', '9' };
N2.digit = { '0', '0', '0', '4', '8', '1', '3', '1', '4', '5'};
N2.decimaldigit { '8', '0', '1', '2', '0' };
*/
/*
Result would be:
N3.digit = { '0', '0', '0', '0', '6', '6', '8', '9', '4', '4'}
N3.decimaldigit { '1', '9', '9', '2', '9' }
*/
Проблема заключается не столько в поиске решения этой проблемы, но это всего лишь около ~ 20 строк были для полного ответа. Мой метод решения включает в себя вычитание цифр по одному после преобразования в целые числа, а затем создание соответствующих переносов, если результат был отрицательным. Это заняло значительно больше места, чем предоставлено.
Основываясь на небольшом количестве меток и пространстве, предоставленных для этого вопроса, я убежден, что существует довольно тривиальное решение, которое я не вижу. Что это? Я закончил курс, но этот вопрос по-прежнему беспокоит меня!
Полное решение не требуется, только внутренняя работа функции difference
.
На всякий случай нельзя использовать побитовые операторы.
Не могли бы вы объяснить, что означает 'decimaldigit'? Кроме того, 5482090-4813145 немного больше, чем 668944.;) – avakar
Это числа с плавающей точкой -. , например. N1 соответствует 5482090.00049f. –
О, я вижу. Это также объясняет странную ошибку «один за другим». – avakar