﻿ ACM 1002：A + B Problem II C语言代码_OC/C/C++_开心洋葱网
• 欢迎访问开心洋葱网站，在线教程，推荐使用最新版火狐浏览器和Chrome浏览器访问本网站，欢迎加入开心洋葱` QQ群`
• 为方便开心洋葱网用户，开心洋葱官网已经开启复制功能！
• 欢迎访问开心洋葱网站，手机也能访问哦~欢迎加入开心洋葱多维思维学习平台` QQ群`
• 如果您觉得本站非常有看点，那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~！
• 由于近期流量激增，小站的ECS没能经的起亲们的访问，本站依然没有盈利，如果各位看如果觉着文字不错，还请看官给小站打个赏~~~~~~~~~~~~~！

# ACM 1002：A + B Problem II C语言代码

2335次浏览

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.

Sample Input

2

1 2

112233445566778899 998877665544332211

Sample Output

Case 1:

1 + 2 = 3

Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

C语言代码1

```
#include <stdio.h>
void main()
{
int T=0,m=1; //m为当前测试的组号
scanf("%d",&T);//T为待测试的组数
while(T--)
{
char c[1000],a[1000],b[1000];
int x=0,y=0,t=0,v=0,j,k,z=0;
scanf("%d%d",&a,&b);//输入A和B
while(a[x])x++;//计算a的位数
while(b[y])y++; //计算b的位数
j=x<y?x:y;//j取A、B两数中较小的数的位数
for(k=0;k<j;k++,z++,x--,y--)
{
t=a[x-1]-48+b[y-1]-48+v; //从两数的末位开始相加
c[z]=48+t%10;//将两数的对应位数相加后的数字赋给数组c
v=t/10; //用来检测是否需要进位
}
if(x<y){
j=y-x;//j为A、B两数的位数之差（正数）
for(k=0;k<j;k++,z++,y--) //将位数较多的数的前几位赋给数组c
{
t=b[y-1]-48+v;
c[z]=48+t%10;
v=t/10;
}
}else{
j=x-y;
for(k=0;k<j;k++,z++,x--)
{
t=a[x-1]-48+v;
c[z]=48+t%10;
v=t/10;
}
}
if(v)//如果结果的最高位数字大于十（即最高位产生进位）
{
c[z]=48+v;//将最高位赋给数组c
z++;
c[z]=0;//数组以'\0'结束
}else c[z]=0;//数组以'\0'结束
char d[1000];
x=0;
while(c[x])x++;
j=x;//将结果的位数赋给j（注意：结果不包括最后的'\0'）
printf("Case %d:\n",m);
m++;
for(k=0;k<j;k++,x--)
{
d[k]=c[x-1];//将数组c反序输出到数组d中
}
d[k]=0;//加入字符串结束符'\0'
printf("%s + %s = %s\n",a,b,d);
if(T)printf("\n");
}
}

```

C语言代码2

```
#include<stdio.h>
#include<string.h>
#define N 1005
void main()
{
char A[N],B[N],S[N];
int T;
int i,j,k,l;
int flag;
while(scanf("%d",&T)!=EOF)
{
for(i=0;i<T;i++)
{
if(i)
printf("\n");
j=0,flag=0;
scanf("%s%s",&A,&B);
k=strlen(A)-1;
l=strlen(B)-1;
while((k+1)&&(l+1))
{
S[j]=(A[k]-'0')+(B[l]-'0')+flag;
if(S[j]>=10)
{
S[j]=S[j]-10;
flag=1;
}
else flag=0;
k--,l--,j++;
}
if(k+1)
while(k>=0)
{
S[j]=(A[k]-'0')+flag;
if(S[j]>=10)
{
S[j]=S[j]-10;
flag=1;
}
else flag=0;
k--;
j++;
}
else if(l+1)
while(l>=0)
{
S[j]=(B[l]-'0')+flag;
if(S[j]>=10)
{
S[j]=S[j]-10;
flag=1;
}
else flag=0;
l--;
j++;
}
if(flag)
S[j]=flag;
else j--;
printf("Case %d:\n",i+1);
printf("%s + %s = ",A,B);
while(j>-1)
printf("%d",S[j--]);
printf("\n");
}
}
}

```

C语言参考代码3

```
// Author: Tanky Woo
// HDOJ 1002
// Accepted 1002 15MS 204K 1354B C++ Tanky Woo

#include <iostream>
#include <algorithm>
using namespace std;
int nCases;
int m[1001], n[1001];
char a[1001], b[1001];
// www.wutianqi.com
int main()
{
//freopen("input.txt", "r", stdin);
scanf("%d", &nCases);
for(int i = 1; i <= nCases; ++i)
{
memset(m, 0, sizeof(m));
memset(n, 0, sizeof(n));
getchar();
scanf("%s %s", a, b);
int len1 = strlen(a);
int len2 = strlen(b);
if(len1 > len2)   //是m长度大于n
{
// 把字符数组a逆序转成int数组m
int cnt = 0;
for(int j = len1-1; j >= 0; --j)
m[cnt++] = a[j] - '0';
// 把字符数组b逆序转成int数组n
cnt = 0;
for(int j = len2-1; j >= 0; --j)
n[cnt++] = b[j] - '0';
}
else
{
// 把字符数组a逆序转成int数组n
int cnt = 0;
for(int j = len1-1; j >= 0; --j)
n[cnt++] = a[j] - '0';
// 把字符数组b逆序转成int数组m
cnt = 0;
for(int j = len2-1; j >= 0; --j)
m[cnt++] = b[j] - '0';
}
int len = len1 > len2? len2: len1;
int k = 0;  //指示最高位

for(int j = 0; j < len; ++j)
{
m[j] += n[j];
if(m[j] >= 10)
k = j+1;
m[j+1] += (m[j]/10);
m[j] %= 10;
}
printf("Case %d:\n", i);
printf("%s + %s = ",a, b);
len = len1>len2? len1: len2;
if(k < len-1)
k = len-1;
for(int j = k; j >= 0; --j)
printf("%d", m[j]);
i == nCases? printf("\n"): printf("\n\n");
}
return 0;
}

```

C++代码1：

```
#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;
cout<<"Case "<<curCase<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
reversePrint(sum,nCount);
if(curCase<caseNum)
{
cout<<endl;
}
}while(curCase<caseNum);
return 0;
}

```

C++代码2

```
// Author: Tanky Woo
// HDOJ 1002
// Accepted 1002 15MS 204K 1354B C++ Tanky Woo

#include <iostream>
#include <algorithm>
using namespace std;
int nCases;
int m[1001], n[1001];
char a[1001], b[1001];
// www.wutianqi.com
int main()
{
//freopen("input.txt", "r", stdin);
scanf("%d", &nCases);
for(int i = 1; i <= nCases; ++i)
{
memset(m, 0, sizeof(m));
memset(n, 0, sizeof(n));
getchar();
scanf("%s %s", a, b);
int len1 = strlen(a);
int len2 = strlen(b);
if(len1 > len2)   //是m长度大于n
{
// 把字符数组a逆序转成int数组m
int cnt = 0;
for(int j = len1-1; j >= 0; --j)
m[cnt++] = a[j] - '0';
// 把字符数组b逆序转成int数组n
cnt = 0;
for(int j = len2-1; j >= 0; --j)
n[cnt++] = b[j] - '0';
}
else
{
// 把字符数组a逆序转成int数组n
int cnt = 0;
for(int j = len1-1; j >= 0; --j)
n[cnt++] = a[j] - '0';
// 把字符数组b逆序转成int数组m
cnt = 0;
for(int j = len2-1; j >= 0; --j)
m[cnt++] = b[j] - '0';
}
int len = len1 > len2? len2: len1;
int k = 0;  //指示最高位

for(int j = 0; j < len; ++j)
{
m[j] += n[j];
if(m[j] >= 10)
k = j+1;
m[j+1] += (m[j]/10);
m[j] %= 10;
}
printf("Case %d:\n", i);
printf("%s + %s = ",a, b);
len = len1>len2? len1: len2;
if(k < len-1)
k = len-1;
for(int j = k; j >= 0; --j)
printf("%d", m[j]);
i == nCases? printf("\n"): printf("\n\n");
}
return 0;
}
```

[开心洋葱]

• 版权声明

本站的文章和资源来自互联网或者站长的原创，按照 CC BY -NC -SA 3.0 CN协议发布和共享，转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长，我们会在24h内删除有争议的资源。
• 合作网站

• 友情链接

• 关于我们

一群热爱思考，热爱生活，有理想的新社会主义接班人的多维思维学习平台，天行健，君子以自强不息。地势坤，君子以厚德载物。
……