大数运算之大数相减

本文介绍了如何在C语言中实现大数相减运算,通过使用int数组存储逆序的数字字符,然后进行减法操作。文章讨论了如何处理低位对齐、借位以及清除高位的0,提供了完整的代码示例。
摘要由CSDN通过智能技术生成
大数减法运算

第一次在CSDN写博客,督促自己不断学习、巩固和进步,希望能和大家一起成长~

在编程实现整数运算时,作为程序猿/媛,我们知道计算机中的int、long或者long long的所占的内存空间是有限的,当整数超过一定大小,这些类型就无法表示整数的值,否则数据会被“截断”,无法得到正确的结果。
那么,该如何实现大数运算呢?刚开始我也是如此的疑惑,但稍加思索,你很快可以想到最简单的方法——使用int数组(或者char数组,既满足要求,又可节省空间)来进行运算。假设有两个大数,char *s1 = "4543636436274354646", char *s2 = "456360989", 我们可以取出每一位的值,放到int数组。

值得注意的是,char *中低地址存放的是高位的数字字符,而运算中我们需要将低位对齐,所以首先将字符串的字符逆序存入数组中, 个位数是数组第一个元素:

int idx, len1, len2, *array1, *array2;
len1 = strlen(s1);
array1 = (int *)calloc(len1, sizeof(int));
for (idx = 0; idx < len1; idx++) {
array1[idx] = s1[len1 - 1 - idx] - '0';
}

照此将s2的数字存到array2中,简单起见,这里假设array1表示的数字大于等于array2表示的数值。接着就是按照减法的定义,被减数当前位小于减数,则向高位借1,自身加10,逻辑如下:
for (idx = 0; idx < len2; idx++) {
if (array1[idx] < array2[idx]) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值