大数加法

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class BigNumPlus
{
public:
	BigNumPlus(string t_strplused,string t_strplus):m_plused(t_strplused),m_plus(t_strplus),m_carryflag(false){}
	string& Add();
	void BitPlus(char a, char b);
private:
	string m_plused;
	string m_plus;
	string m_result;
	bool m_carryflag; 
};

string& BigNumPlus::Add()
{
	int t_iplusedlen = m_plused.length()-1;
	int t_ipluslen = m_plus.length()-1;

	for(;(t_iplusedlen >= 0)&&(t_ipluslen >= 0); t_iplusedlen--, t_ipluslen--)
	{
		BitPlus(m_plused[t_iplusedlen], m_plus[t_ipluslen]);
	}

	if(t_iplusedlen<0 && t_ipluslen>=0)
	{
		m_result.insert(0,m_plus.c_str(),t_ipluslen+1);
	}
	else if(t_ipluslen<0 && t_iplusedlen>=0)
	{
		m_result.insert(0,m_plused.c_str(),t_iplusedlen+1);
	}

	return m_result;
}

void BigNumPlus::BitPlus(char a, char b)
{
	int ia = a - '0';
	int ib = b - '0';
	int ic;
	if(m_carryflag == true)
	{
		ic = ia+ib+1;
		m_result.insert(0,1,(ia+ib+1)%10+'0');
	}
	else
	{
		ic = ia+ib;
		m_result.insert(0,1,(ia+ib)%10+'0');
	}
	if(	ic >= 10)
	{
		m_carryflag = true;
	}
	else
	{
		m_carryflag = false;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	string t_strplused, t_strplus;
	cin>>t_strplused>>t_strplus;
	BigNumPlus bignumplus(t_strplused, t_strplus);
	cout<<bignumplus.Add()<<endl;
	return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值