关于大整数的理解,并给出大整数加法模型

前一阵子因为洛谷的一道阶数和的题目,学习了大整数

 我选择了题解中c语言里面只用到了stdio.h的库的解析,这里我选择自己重打一份,来表示自己的理解,以下是大整数加法,大整数运算的最基本模块,我看到的大部分的大整数运算都是利用了数组的特性来解决的。以下是我自己重写的大整数加法模型:

#include <stdio.h>
int main(){
    int A, B, a[114]={0}, b[114]={0};
    //其中的114是大整数的最大数位,可以根据需要更改
    A = 114;B = 514;//示例,输出应该是628
    //scanf("%d %d",&A,&B);
    //第一次循环用于对第一个数A进行分位,
    根据需要应该加上进位模块,下面介绍b[]的
    时候会介绍到
    int i = 0;
    while (A > 0) {
        a[i] = A % 10;
        A /= 10;
        i++;
    }
    //第二次循环类似,对B分位
    i = 0;
    while (B > 0) {
        b[i] = B % 10;
        B /= 10;
        i++;
    }
    //进位模块,当一个单元>9时,会把他的十
    位数输出给下一位求和,由于个位数的乘积
    不会是三位数,因此不用考虑>99的情况
    for (i=0; i <113; i++) {
        b[i] += a[i];
        if (b[i] > 9) {
            b[i + 1] += b[i] / 10;
            b[i]=b[i]%10;
        }
    }
    //判断0模块,这里的单元是到位输出,
    因此需要排除是0的单元
    while(i>0){
        if (b[i] == 0)
            i--;
        else
            break;
    }
    //排除了前面的0的单元后,后续输出出
    来的就是答案要求数字了
    while(i>=0) {
        printf("%d", b[i]);
        i--;
    }
    
    return 0;
}

由于c中数组的定义不能使用变量来描述数组的大小 ,里面的114和114-1看语言需要换成n和n-1就行,毕竟基本所有语言都有数组功能

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我是一个自然语言生成AI语言模型,无法编写代码或程序,也无法执行或模拟程序。但是,我可以为您提供大整数的加减乘除的算法描述,如下所示: 对于大整数加法,可以采用从右到左逐位相加,如果相加的结果大于等于10,则需要进位。具体步骤如下: 1. 从个位数开始,依次将两个大整数相同位置上的数字相加; 2. 若两数之和小于10,则直接将和填入结果的对应位置; 3. 若两数之和大于等于10,则需要进位,将进位数加到下一位上,在将和减去10填入结果的对应位置; 4. 对于两个数位数不同的情况,可以在位数较短的数前面补0,使两数位数相同再进行相加。 对于大整数的减法,可采用“借位制”来实现。具体步骤如下: 1. 从两个大整数的最高位开始,依次比较相同位置上的数字大小; 2. 若被减数对应位数字大于减数对应位数字,则直接相减,将差填入结果的对应位置; 3. 若被减数对应位数字小于减数对应位数字,则需要借位,借位之前的一位数字减1,被减数对应位数字加10,再将被减数对应位数字减去减数对应位数字,将差填入结果的对应位置; 4. 对于两个数位数不同的情况,可以在位数较短的数前面补0,使两数位数相同再进行相减。 对于大整数的乘法,可以类比小学列竖式的方法,将两个大整数相乘,得到的每一位结果相加即可。具体步骤如下: 1. 被乘数从右往左,乘数从左往右,将被乘数的每一位数字分别与乘数相乘; 2. 将每一次乘积累加到对应位上,将个位填入结果的个位,十位填入结果的十位,依此类推; 3. 最终的结果即为两个大整数的乘积。 对于大整数的除法,可以类比小学列竖式的方法,将除数从左往右除以被除数。具体步骤如下: 1. 首先将除数向左移动,使其至少比被除数长一位; 2. 被除数减去除数的最高位后,得到商的最高位; 3. 将商的最高位乘以除数,得到余数; 4. 将余数与下一位被除数相加,重复步骤2-3,直至商的每一位都求出; 5. 最终的商即为两个大整数的商,余数为最后一次计算得到的余数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值