
这是一道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 展开
最近,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 展开
1个回答
展开全部
#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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询