描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
#include<stdio.h>
#include<string.h>
void Bigdata(char *s1,char *s2)
{
int num1[200]={0}; //数据 1
int num2[200]={0}; //数据 2
int num[201]={0}; //求和结果
int len1=strlen(s1); //数据 1长度
int len2=strlen(s2); //数据 2长度
int i,f=0;
//将两个大数倒置存放到 num1 和 num2 中,计算从低位开始
for(i=0;i<len1;i++)
{
num1[i]=s1[len1-1-i]-'0'; //-'0'是为了将字符转换成数字
}
for(i=0;i<len2;i++)
{
num2[i]=s2[len2-1-i]-'0'; //-'0'是为了将字符转换成数字
}
//位数不同,小的补 0
int len=len1>len2?len1:len2;
//进行相加
for(i=0;i<len;i++)
{
num[i]+=num1[i]+num2[i];
if(num[i]>9)
{
num[i]%=10; //进位取个位
num[i+1]++;
}
}
//结果输出
for(i=len;i>=0;i--) //前导 0不用输入
{
if(f==0&&num[i]==0)
{
continue;
}
else //当前导 0忽略完,遇到最高位数据,此后的 0都不是前导 0,不用再忽略了
{
f=1;
printf("%d",num[i]);
}
}
if(f==0) //结果为 0的情况
{
printf("0");
}
}
int main()
{
char str1[200]={0};
char str2[200]={0};
scanf("%s %s",str1,str2);
Bigdata(str1,str2); //传入两个数组
return 0;
}