航电OJ1002

#航电OJ1002
问题描述
对您来说,我有一个非常简单的问题。给定两个整数A和B,您的工作是计算A + B的总和。

输入项
输入的第一行包含一个整数T(1 <= T <= 20),它表示测试用例的数量。然后是T行,每行由两个正整数A和B组成。请注意,这些整数非常大,这意味着您不应使用32位整数对其进行处理。您可以假设每个整数的长度不超过1000。

输出量
对于每个测试用例,您应该输出两行。第一行是“ Case#:”,#表示测试用例的编号。第二行是等式“ A + B = Sum”,Sum表示A + B的结果。请注意,该等式中有一些空格。在两个测试用例之间输出空白行。

样本输入
2
1 2
112233445566778899 998877665544332211

样本输出
情况1:
1 + 2 = 3

情况2:
112233445566778899 + 998877665544332211 = 1111111111111111110

注意:

  1. 这个题不能用整数简单相加来做,题目描述中已经进行了提示(请注意,这些整数非常大,这意味着您不应使用32位整数对其进行处理。您可以假设每个整数的长度不超过1000。),用整数简单相加会导致数据溢出,应选用字符串解决问题。
  2. 下列解题过程中用到的sstream中的stringstream定义的ss要进行重复使用,每次使用前必须用clear函数进行清除。
  3. 注意格式问题,最后一行不能多输出一个换行。
  4. 字符串解决的思路即为自己在草稿纸上对两个整数进行求和时的思路,相同数位的数进行相加,相加之和>=10时则向前进1。
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
	int T;
	cin>>T;
	
	for(int count=1;count<=T;count++)
	{
		
		string a,b,sum="",strsin="",strdec="";
	    int media=0,sin=0,dec=0;
	    cin>>a>>b;
	    int i=a.size()-1,j=b.size()-1;
	    while(i>=0||j>=0)
	    {
	    	stringstream ss;
		    if(i>=0) media+=a[i--]-'0';
		    if(j>=0) media+=b[j--]-'0';
		    sin=media%10;
		    dec=media/10;
		    media=dec;
		    ss.clear();
		    ss<<sin;
		    ss>>strsin;
		    ss.clear();
		    ss<<dec;
		    ss>>strdec;
		    sum=strsin+sum;
	    }
	    if(dec>0) 
	        sum=strdec+sum;
	    cout<<"Case "<<count<<':'<<'\n'<<a<<" + "<<b<<" = "<<sum<<'\n';
	    if(count<T) cout<<'\n';//注意最后一行不能多输出一个换行
	}
	cout<<'\n';
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值