A + B Problem II |
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 3541 Accepted Submission(s): 1290 |
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 |
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <string>
using namespace std;
int main()
{
int n,K=1;
cin>>n;
while(n--){
string a , b;
//freopen("out.txt", "w", stdout);
cin >> a >> b;
cout << "Case " << K++ << ":" <<endl;
cout << a << " + " << b << " = " ;
char result[2000];
memset(result,'0',sizeof(result));
while(a.size() > b.size()) {
b = "0"+ b;
}
while(b.size() > a.size()){
a = "0"+ a;
}
//cout<<a<<endl;
//cout << b <<endl;
int len = a.size();
int jinzhi = 0; //string result = "";
int count = 0;
for(int i = len - 1 ;i >= 0; i--){
int temp = jinzhi + (a[i] + b[i] - 2 * '0');
result[count++] = (temp % 10 + '0');
//cout << "result" << i << " : " << result << endl;
jinzhi = temp / 10;
}
if(jinzhi == 1){
result[count++] = '1';
}
for(int i = count -1 ;i >= 0; i--){
cout<<result[i];
}
if(n >= 1)
cout<<endl<<endl;
else cout<<endl;
}
return 0;
}
/**
#include <iostream>
#include <string>
#include <string.h>
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;
}**/