这是一道C++编程题目 请各位C++高手们帮忙写一下代码 谢谢

描述最近,lcl总会遇到一些怪事,比如邮箱里每天都会多出一些诡异的邮件,其中,有一组邮件的内容是这样的:能帮我计算一下A+B么?邮件的后面会附上A和B两个正整数。一开始,... 描述

最近,lcl总会遇到一些怪事,比如邮箱里每天都会多出一些诡异的邮件,其中,有一组邮件的内容是这样的:能帮我计算一下A+B么?邮件的后面会附上A和B两个正整数。

一开始,lcl觉得很无聊,因为A和B都很小,计算起来很简单,但逐渐的,给出的A和B变得很大,她开始计算不了了,于是懒惰的她又找到了你~快用你的程序帮她解决问题吧~

注意,A和B的值都可能非常大,但保证它们的长度不超过100.

输入
第一行包括一个整数T,表示共有T组数据.
第2~2*T+1行:
对于每组数据,占两行,包含两个超长正整数A,B。(长度<100)

输出
对于每组数据,输出一行,格式:A + B = 计算结果。

样例输入
2
1
2
112233445566778899
998877665544332211
样例输出
1 + 2 = 3
112233445566778899 + 998877665544332211 = 1111111111111111110
展开
 我来答
伟绩惟汉称尊8
2010-12-14 · 超过26用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:72.4万
展开全部
#include<iostream>
#include<String>

using namespace std;

/**
* 大数的加法,利用字符串处理
* 注:如果需要追求速度,最好采用指针处理
*/

string add(const string str1, const string str2 )
{
int carry=0; // 标志“进位“变量,初始为0

int len1 = str1.length(); // 字符串1的长度
int len2 = str2.length(); // 字符串2的长度

string result=""; // 记录计算结果

char ch;
int temp=0;
int i=len1-1;
int j=len2-1;
while(i>=0&&j>=0)
{
temp =(int)( str1[i]-'0' + str2[j]-'0' + carry ); // 计算对应某一位相加的结果
carry = temp/10; // 计算进位
ch = (char)(temp%10+'0'); // 将数字转化成字符
result = ch+result; // 将这一位连接到结果字符串
--i;
--j;
} // end while

while(i>=0) // 判断字符串1是否处理结束
{
temp =(int)( str1[i]-'0'+ carry ); // 计算对应某一位相加的结果
carry = temp/10; // 计算进位
ch = (char)(temp%10+'0'); // 将数字转化成字符
result = ch+result; // 将这一位连接到结果字符串
--i;
} // end while

while(j>=0) // 判断字符串2是否处理结束
{
temp =(int)( str2[j]-'0' + carry ); // 计算对应某一位相加的结果
carry = temp/10; // 计算进位
ch = (char)(temp%10+'0'); // 将数字转化成字符
result = ch+result; // 将这一位连接到结果字符串
--j;
} // end while

// 对进位进行处理
if( carry!=0 )
{
ch =(char)(carry+'0');
result = ch + result;
}

return result; // 返回计算结果
}

int main()
{
string str1, str2;

int n;
cin>>n;
while(n--)
{
cin>>str1>>str2 ;
cout<<str1<<" + "<<str2<<" = ";
cout<<add( str1, str2 )<<endl;
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式