杭电oj——1002 A + B Problem II

题目 :    http://acm.hdu.edu.cn/showproblem.php?pid=1002

解题思路:两个大数相加,用int肯定会爆。我们用string来玩玩,首先两个数的位数可以相同,可能不相同,所有我们倒序相加,然后我们要比较他们的位数,用长的位数的数去接住他们的和,如果单个位数相加大于10,就向前进一位。最后结果再反过来。

注:这是一个神奇的网站,当他们的位数相同且结果为他们的位数加1,前面那个数显示不出来。例如:50+51=101,编译时只有01,可是交上去A了,编译的时候要在VS上,在VC上会出现一些字。虽然A了,但存在一些小问题难过

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
	int n,s,i,j;
	cin>>n;
	string str1,str2,str,str3;
	for(j=1;j<=n;j++)
	{
		cin>>str1>>str2;str=str1;str3=str2;
		reverse(str1.begin(),str1.end());
		reverse(str2.begin(),str2.end());
        if(str1.size()<str2.size())
			swap(str1,str2);
		for(i=0;i<str2.size();i++)
		{
			s=(str1[i]-'0')+(str2[i]-'0');//将string转化为int型
			if(s<10)
				str1[i]=s+'0';
			else
			{
				str1[i]=(s%10)+'0';
			    str1[i+1]+=1;
			}
		}
		reverse(str1.begin(),str1.end());
		cout<<"Case "<<j<<":"<<endl;
		cout<<str<<" + "<<str3<<" = "<<str1<<endl;
		if(j!=n)
		{
			cout<<endl;
		}
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值