前言:
前面介绍了有关的思想,和本片博客的测试环境,所以作为第二篇的减法篇就不再过多的介绍,直接开始关于大数加法的实现。
大数减法:
与加法类似,还是将用户的输入和结果放入变长的数组中然后模仿手工运算从低位到高位依次相减,会有三个需要解决的问题,其中前二个和大数加法的问题很相似,所以就不再详细说明。
问题:
1.结果最多有多少位?
2.借位的算法如何实现?
3.如果一个8位数减去4位数,那么8位数较高的4位如何处理?
前两个问题参考大数加法都可以得到解决。
1.结果的最大位数和较大的减数位数相同,所以结果数组的长度可以和减数位数相同。
2.同加法类似,先存储每位相减的结果然后在用一个循环作整理。
3.可以把被减数缺少的位数用零补全然后相减,也可以只减到被减数的位数,然后将减数的高位直接写道结果的数组中。
注意:
本算法只可以拿大数减小数,因为小数减大数只不过还是拿大的减小的然后加个负号而已,所以本着简洁的原则,只允许用大数减去小数。
实现:
同加法一样还是把减法写成方法,然后在mian函数中调用,下面是完整的有详细注释的代码。
1 //#include"big.h"
2 #include<stdlib.h>
3 #include<stdio.h>
4 #include<string.h>
5 char * bigsub(char *suba,int lena,char *subb,int lenb){ //大数减法的的方法。
6 int lensu