#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char num_a[1001],num_b[1001];
int re_a[1001],re_b[1001],sum[1001];
int t,pre=0,flag=1;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",num_a,num_b);
//初始化
memset(re_a,0,sizeof(re_a));
memset(re_b,0,sizeof(re_b));
memset(sum,0,sizeof(sum));
int len_a=strlen(num_a);
int len_b=strlen(num_b);
int len_max=len_a>len_b?len_a:len_b;
//将字符串转化为数字,并且倒序
for(int i=0;i<len_a;++i)
{
re_a[len_a-1-i]=num_a[i]-'0';
}
for(int i=0;i<len_b;++i)
{
re_b[len_b-1-i]=num_b[i]-'0';
}
//倒叙后的数字进行相加
for(int k=0;k<len_max;++k)
{
sum[k]=re_a[k]+re_b[k]+pre/10;
pre=sum[k];
}
if(pre>9)
{
sum[len_max]=pre/10;
len_max++;
}
printf("Case %d:\n",flag++);
printf("%s + %s = ",num_a,num_b);
//输出结果,每位数字需要对10进行取余输出
for(int i=len_max-1;i>=0;--i)
{
printf("%d",sum[i]%10);
}
printf("\n");
if(t)printf("\n");//在最后一次输出的时候不需要输出空一行
}
return 0;
}
题目要求
数字的长度为1000以内,进行大数加法运算。
解题思想
- 使用字符串接收大数
- 将字符串转化为数字,同时进行倒序(因为我们的加法都是从低位开始的)
- 利用两个倒序后的数字进行加和,并进行进位
- 输出存在于大数中的和sum的每位的值(通过对每位取余进行输出)
解题细节
1、不妨设数字串a长于字符串b
a0 a1 a2 a3…an1
b0 b1 b2 b3…bn2(n1>n2)
len_max(sum的长度)等于n1
2、倒序后的字符串为
an1 … a3 a2 a1 a0
bn2 … b3 b2 b1 b0
3、进行相加
sum[n1]=an1+bn2
sum[n1-1]=a[n1-1]+b[n2-1]
。。。。。。
sum[0]=a[0](记得进行进位计算,代码中的pre变量就是进位的标志位)
4、倒序输出sum的值(每位都对10进行取余计算)