上一篇博客我们实现了巨大数的加减法,现在我来填一下我上个博客结尾留下的坑——巨大数的乘法。
相较于加减法乘法的实现更加容易实现,我们可以类比十进制下的乘法来进行手工过程的实现。
既然十进制的乘法是如此那么在万进制下的乘法也应是如此的,但是如何解决每次计算结果的存储问题呢,这个问题在我编程的时候困扰我了好久。
其实很简单,就是我们把每一轮(或者说每一次)的计算结果按万进制直接存入我们的结果巨大数的数组中就好了。
对了,最终结果巨大数的位数应该是两个相乘巨大数位数之和(在万进制下)。
下来我们看一下核心代码:
void multiInfor(HUGE_NUM *NUM1, HUGE_NUM *NUM2, HUGE_NUM *NUM3) {
int i;
int j;
int count1 = (NUM1->count+3) / 4;
int count2 = (NUM2->count+3) / 4;
int temp;
int cur;
int next;
NUM3->sign = NUM1->sign ^ NUM2->sign;
for (i = 0; i < count1; i++) {
for (j = 0; j < count2; j++) {
temp = NUM1->value[i] * NUM2->value[j] + NUM3->value[i+j];
cur = temp % 10000;
next = temp / 10000;
NUM3->value[i+j] = cur;
NUM3->value[i+j+1] = next;
}
}
}
其他的代码与巨大数加减法的代码一样,需要的可以在我的上一篇博客中拿。
至此,巨大数的项目算是完了,至于小数与除法问题本人在时间和能力上还是有些欠缺暂时无法完全实现。
本项目的所有指导均来自于微易码的朱洪老师。