两个超级大数相加

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个超级大数相加相关的知识,希望对你有一定的参考价值。

if you want the rainbow , you have to deal with the rain
你若想要彩虹,必须经历风雨

问题描述
给定两个字符串形式的非负整数num1和num2,计算他们的值!!!(一般超越整数类型的范围值)。

“12345678901278”+“234”=“12345678901512”

代码描述:

#include <stdio.h>
#include <string.h>
/***********************************************************
*版权所有:(C) 2021.7.22  烽火编程(第八方面军) 
* 
*文件名称:两个超大数(字符串数字相加) 
*内容摘要:大数算法 
*当前版本:1.1版本
*文件作者:帅子牛和帅子红
*完成日期:2021.7.22
*
*修改记录:暂无 
***********************************************************/
int main() {
	char a[]={"12345678901278"};
	char b[]={"234"};
	int a_len = strlen(a);
	int b_len = strlen(b);
	int c[300];//用来存储结果数据
	int k=0;
	int carry=0,i=a_len-1,j=b_len-1;//carry用来存储进位的值(1或者0)
	while(i>=0||j>=0||carry!=0){
	/*算代设计的巧妙地点,i和j分别代表的是两个大数的最后一位字符下标,
	此算法相当于从最右边开始相加,把计算的结果一次放置到新的数组里面(不要纠结顺序倒逆),输出结果只需要逆读即可得出*/
		int x = i<0 ? 0:a[i--]-'0';
		int y = j<0 ? 0:b[j--]-'0';//自己尝试理解噻(核心哟)
		int sum = x+y+carry;
		c[k++] = sum%10;//假如数字相加大于10的话只需要个位就行
		carry = sum/10;//假如数字相加大于10将进位的数字赋值给carry
	}
	/*最后倒序输出即可*/
	for(i=k-1;i>=0;i--){
		printf("%d",c[i]);
	}
	  
	return 0;
}

以上是关于两个超级大数相加的主要内容,如果未能解决你的问题,请参考以下文章

算法:如何实现两个大数相加

算法:如何实现两个大数相加

算法:如何实现两个大数相加

大数四则运算

大数相加

java-两个大数相加