大约 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
。
不使用位运算符,以防万一。