大数减法(C语言)

其实思路很简单,就是从后往前进行扫描然后逐项相减即可。比较麻烦的是进行借位和小数减大数,思路如下:

1.获取输入的两个数据的长度。这个可以在进行输入的时候就进行获取。

2.用长一些的数据减去短一些的数据。如果第一个数据长直接操作即可,若第二个数据长,则输出的时候加负号即可

3.借位。借位的数字加10,同时前面一个数字减一 。操作利用递归进行完成,注意数组不要越界,控制被借位的数字位置大于等于0.

4.长度相同,小数减大数。此时必定会出现再向前借位,即1会借位成为11,11会借位成为111(理解:例如11-22,11>22则第一个11中的第一个1一定会向前再借1,成为11再减2。也即11-22会变成111-22)。这个时候其实原始数据增加了10的n次方,也即得到的结果多了一部分,需要将这一块减去。但是直接减又会出现小数减大数,因此利用相反数,用多出来的10的n次方减去最初的结果再加负号即可。

具体实现代码如下:

#include<stdio.h>
#include<stdlib.h>
#define MAX_LENGTH  20//初始定义最大数字长度为20 
typedef struct{
    char *numbers;
    int length;
    int max_length;
}Nums,*NNums;

//代码思路为:先调用输入函数进行输入,再调用相减函数,在相减函数中调用计算函数,计算函数中调用借位函数。尽可能降低耦合性。

Nums input();//输入函数,输入需要进行计算的数据
void sub(NNums,NNums,int*);//相减函数:第一个参数为长的数字&#x
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值