C语言大数加法学习/复习

大数加法

为什么C语言会有大数加法这个专门的概念?

难道大数不是直接相加就行了吗?

其实是因为C语言中定义的整数型都是有位数限制的。比如int型的取值范围为-2147483648~+2147483647,即使是long long int的取值范围也只是-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807。

这样就导致如果数字超过这个范围就会出错,因此才有大数加法这个概念。

为了解决数字相加过大导致的错误,我们在计算大数相加的时候不使用整数型来进行计算。而是使用字符串数组来进行计算!

完整代码如下:

初学的时候看起可能会有点难度,但是坚持下去就会有很大的收获。

#include<stdio.h>
#include<string.h>
#define N 10000//定义数组的长度,这个长度要大于结果的长度
int main()
{
    char sz_1[N]={0},sz_2[N]={0},sz[N]={0};//初始化
    int n,m,z;
    int i;
    printf("请输入第一个数\n");
	gets(sz_1);
	printf("请输入第二个数\n");
	gets(sz_2);
	n=strlen(sz_1);//计算开始的时候两数的长度
	m=strlen(sz_2);
	z=n>m?n:m;//
	z++;//这里的z++是为了防止结果进位导致不够
	for(i=0;i<n&&i<m;i++)
    {    //从最后面的数加起,因为最后面的数是最小位
        sz[z-1-i]=sz_1[n-i-1]-'0'+sz_2[m-1-i]-'0';//这里减去'0'才是其真正的数字
    }
    if(n>m)//下面把大的位直接放到数组里
    {
        for(;i<n;i++)
        {
            sz[z-1-i]=sz_1[n-i-1]-'0';
        }
    }
    else
    {
      for(;i<m;i++)
      {
          sz[z-1-i]=sz_2[m-i-1]-'0';
      }
    }
    for(i=z-1;i>0;i--)
    {
        if(sz[i]>=10)
        {
            sz[i]=sz[i]%10;//大于10的数要进位
            sz[i-1]++;
        }
    }
    if(sz[0]!=0)
    {
        for(i=0;i<z;i++)
        {
            sz[i]+='0';//这里与上面对应,加了'0'才是ASCLL码对应的数字
        }
        sz[z]='\0';
    }
    else
    {
        for(i=1;i<z;i++)
        {
            sz[i-1]=sz[i]+'0';
        }
        sz[z-1]='\0';
    }
    printf("两数相加:\n");
    puts(sz);//输出结果验证
    return 0;
}

代码运行结果如下:
在这里插入图片描述

总结:大数加法看上去有点难度,但是其实很简单,只需要你认真看完!

个人心得:兴趣与成就感是我们进步的最大动力!希望可以写自己复习看起舒适,别人一下子就可以看懂的博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伦敦看日出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值