题目:我有一个非常简单的问题给你。给定两个整数 A 和 B,您的工作是计算 A + B 的总和。
输入
输入的第一行包含整数 T(1<=T<=20),这意味着测试案例的数量。然后T行跟随,每行由两个正整数,A和B组成。 请注意,整数非常大,这意味着您不应该使用32位整数处理它们。您可以假设每个整数的长度不会超过 1000。
输出
对于每个测试案例,您应该输出两行。第一行是"案例":",#表示测试案例的数量。第二行是方程"A + B = Sum",Sum 表示 A + B 的结果。 请注意,方程中有一些空格。在两个测试案例之间输出一条空白线。
示例输入
2 1 2 112233445566778899 998877665544332211
样品输出
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
思路:由于整数长度最大可到1000,需要使用数组才存储。在使用竖式进行加法运算时,要从个位数开始加起,所以我们要把大整数逆序存储在数组中。两个数对应位相加后大于10便要把该数减10并对高位加1(逢十进一)
代码:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[1000],b[1000];
int a_int[1001],b_int[1001];
int t,a_len,b_len,max_len;
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>a>>b;
a_len = strlen(a);
b_len = strlen(b);//求两个数的长度
//将两个数倒置存入新数组
int tmp=0;
for(int j=a_len-1;j>=0;j--)
{
a_int[tmp++]=a[j]-'0';//将字符改为数字
}
tmp=0;
for(int k=b_len-1;k>=0;k--)
{
b_int[tmp++]=b[k]-'0';
}
//使两个数组长度相同,用0补齐,且比原长度加一
if(a_len>b_len)
{
for(int j=b_len;j<=a_len;j++)
{
b_int[j]=0;
}
a_int[a_len]=0;
}
else if(a_len<b_len)
{
for(int j=a_len;j<=b_len;j++)
{
a_int[j]=0;
}
b_int[b_len]=0;
}
else
{
a_int[a_len]=0;
b_int[b_len]=0;
}
max_len=(a_len>=b_len)? a_len:b_len;
for(int j=0;j<=max_len;j++)
{
a_int[j]+=b_int[j];
if(a_int[j]>=10)
{
a_int[j]-=10;//满10进1
a_int[j+1]+=1;
}
}
cout<<"Case "<<i<<":"<<endl;
cout<<a<<" "<<"+"<<" "<<b<<" "<<"="<<" ";
if(a_int[max_len]==0)//最高位为0,抛弃最高位倒叙输出
{
for(int j=max_len-1;j>=0;j--)
cout<<a_int[j];
}
else//最高位不为0直接倒叙输出
{
for(int j=max_len;j>=0;j--)
cout<<a_int[j];
}
if(i!=t)
cout<<endl<<endl;
else
cout<<endl;
}
return 0;
}