Я только что закончил свой экзамен на вводном курсе С около 20 минут назад. Первый вопрос на экзамене застал меня врасплох и заключался в том, чтобы найти разницу в двух больших числах.
Целью было взять две структуры (N1 и N2) по значению и сохранить разницу в структуре, переданной по ссылке (N3). Нам разрешили предположить, что N3 был инициирован со всеми нулями. Максимальный размер может быть любым, поэтому решение все равно должно работать, если числа превышают 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
.
Никакие побитовые операторы не должны использоваться, на всякий случай.