两个超级大数相加
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;
}
以上是关于两个超级大数相加的主要内容,如果未能解决你的问题,请参考以下文章