Problem Description
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
Input
The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
Output
For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
C:
#include<stdio.h>
#include<string.h>
int main()
{
char a[2005]; //a,b接收加数
char b[2005];
int ans[2005]; //存储相加结果
int t,flag;
int index=1;
int len1,len2;
scanf("%d",&t);
while(t--)
{
memset(ans,0,sizeof(ans)); //每次赋零
scanf("%s%s",a,b);
len1=strlen(a);
len2=strlen(b);
int i=len1-1; //i,j分别指向a,b待处理的位置。
int j=len2-1;
int p=0; //指向ans中待处理的位置
while(i>=0 && j>=0) //做加法运算 ,直到一个字符串被算完。
{
if(ans[p]+(a[i]-'0')+(b[j]-'0')>9) //大于9,进位。
{
ans[p]=(ans[p]+(a[i]-'0')+(b[j]-'0'))%10;
ans[p+1]++;
}
else
{
ans[p]=ans[p]+(a[i]-'0')+(b[j]-'0');
}
i--;j--;p++;
}
if(i>=0) //当a有剩余时就单独和a做运算。
{
while(i>=0)
{
if(ans[p]+(a[i]-'0')>9)
{
ans[p]=(ans[p]+(a[i]-'0'))%10;
ans[p+1]++;
}
else
{
ans[p]=ans[p]+(a[i]-'0');
}
i--;p++;
}
}
else if(j>=0)
{
while(j>=0)
{
if(ans[p]+(b[j]-'0')>9)
{
ans[p]=(ans[p]+(b[j]-'0'))%10;
ans[p+1]++;
}
else
{
ans[p]=ans[p]+(b[j]-'0');
}
j--;p++;
}
}
flag=0;
printf("Case %d:\n",index); index++;
printf("%s + %s = ",a,b);
for(int i=p;i>=0;i--)
{
if(ans[i]==0 && flag==0)//加标记位,防止过多的前缀0
continue;
else
{
flag=1;
printf("%d",ans[i]);
}
}
printf("\n");
if(t)
printf("\n");
}
return 0;
}
C++:
#include <iostream>
#include <string>
using namespace std;
void Add(string a,string b,char sum[],int& count)
{//大数加法
int len1 = a.length();//数a的长度
int len2 = b.length();//数b的长度
int i = len1-1,j = len2-1,temp = 0,carryIn = 0;//初始进位为
count = 0;
//从最后一位开始做加法
while(i>=0&&j>=0)
{
temp = a[i]-'0'+b[j]-'0'+carryIn;//计算当前位
sum[count++] = temp%10+'0';
carryIn = temp/10;//计算进位
--i;
--j;
}
//第一个数还有剩余
if(i>=0)
{
//利用进位继续做
while(i>=0)
{
temp = a[i]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--i;
}
}
//第二个数还有剩余
if(j>=0)
{
while(j>=0)
{
temp = b[j]-'0'+carryIn;
sum[count++] = temp%10+'0';
carryIn = temp/10;
--j;
}
}
//最高位特殊考虑下
if(carryIn>0)
{
sum[count++] = '1';
}
}
void reversePrint(char arr[],int len)
{//逆向输出
for(int i=len-1;i>=0;--i)
{
cout<<arr[i];
}
cout<<endl;
}
int main()
{
string a,b;
char sum[2000];//和
memset(sum,'0',2000);
int nCount = 0;
int caseNum,curCase=0;
cin>>caseNum;
do
{
curCase++;
cin>>a>>b;
Add(a,b,sum,nCount);
cout<<"Case "<<curCase<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
reversePrint(sum,nCount);
if(curCase<caseNum)
{
cout<<endl;
}
}while(curCase<caseNum);
return 0;
}
Java:
import java.math.BigInteger;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n;
BigInteger a, b;
n = cin.nextInt();
for (int i = 0; i < n; i++) {
if (i > 0) {
System.out.println();
}
a = cin.nextBigInteger();
b = cin.nextBigInteger();
System.out.println("Case " + (i + 1) + ":");
System.out.println("" + a + " + " + b + " = " + a.add(b));
}
}
}