两个大数相加输出结果(C语言)

    首先这个算法的要求是:两个一百位以内的大数相加输出结果,两个数长短不确定。

    那么什么样的数字是大数呢? 所谓的大数其实就是一个无限大的数字,他的位数没有限制;int,long型都装不下的数字,所以在这我们自然就考虑到用字符串或是字符数组的形式来存取数的每个数字,对两个大数的每个数字来进行加法运算,结果大于9的就进位。

废话不多说,下面是这个算法的解决:

#include <stdio.h>
#include <string.h>
#define N 100 //因为题目要求是一个一百位内的大数相加,所以我们宏定义一个N为100

//大数相加的函数
void Bigdata(char *s1, char*s2)
{
//这里前两个为待计算的大数,将计算结果的每个数字存在num数组中,至于为什么都将3个数组中每个元素初始化为0,后面解释。
	int num1[N] = {0}, num2[N] = {0}, num[N+1] = {0};//因为存在进位所以存放结果的数组大小可能会超过百位
	int len1 = strlen(s1);//分别求出两个字符数组的大小,即所含字符数字的个数
	int len2 = strlen(s2);

	int i;
	//将两个大数倒置存放到num1和num2数组中,倒置原因是我们希望数字的前面存放数字的低位,我们从索引为0开始即从个位相加往前进位。
	for(i = 0; i < len1; i++)
		num1[i] = s1[len1-i-1] - '0';// -'0'是为了将字符转为整型数字
	for(i = 0; i < len2; i++)
		num2[i] = s2[len2-i-1] - '0';
	
	//两个数字位数不同,取位数长的数字的大小给len
	int len = len1 > len2 ? len1: len2;
	for(i = 0; i < len; i++) {
	//这里将每位相加送到num对应的数组中,用+=,不用=的原因是若有进位还有加上进位的1,进位处理在下if代码段中
		num[i] += num1[i]+num2[i];
		if(num[i] > 9) {//如产生进位
			num[i] %= 10;//取个位
			num[i+1]++;//因为之前初始化都为0,所以在未赋值前num中的数都为0,这里将索引后一位(即是数字中的前一位比如9+1=10其中1和0分别存在num[1],num[0]的位置)自加1表示进位。
		}
	}
	if(num[len] != 0)//如果发生进位,最高位输出,最高位也一定是1
		printf("%d", num[len]);
	for(i = len-1; i >= 0; i--)
		printf("%d", num[i]);//倒置输出,从高位输出。
}
int main()
{
	char str1[N];
	char str2[N];
	printf("请分别输入两个大数:\n");//输入两个字符数组
	scanf("%s %s", str1, str2);
	Bigdata(str1, str2);//最终得出结果
	return 0;
}

如果你有更好的方法,欢迎留言交流。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值