大数加法

这是我最近研究大数问题的一点心得,我发现用string s比用char *s要好用的多,因为在string中加入一个字符删除一个字符要简单很多,下面这个代码是只针对都是整数的大数进行的加法,如果想要进行小数的加法,只要记下小数点的位置,最后加上去就可以了。

#include <iostream>
#include<string>
using namespace std;

void add(string a,string b)
{
	int la = a.size();
	int lb = b.size();
	string s = "";
	int max = (la > lb ? la : lb);
	s.insert(s.begin(), max+1,'0');//可能会进位所以多一个‘0’
	for (int i = la - 1, j = lb - 1, k = s.size()-1;i>=0||j>=0; i--, j--,k--)//从s的最后一位数开始添加。
	{
		int temp;
		if(i>=0&&j>=0)
			temp= a[i] - '0' + b[j] - '0';
		else if (i >= 0)
			temp = a[i] - '0';
		else if (j >= 0)
			temp = b[i] - '0';
		s[k] = temp % 10 + '0';
		s[k - 1] = s[k - 1] - '0' + temp / 10 + '0';
	}
	if (s[0] == '0')
		s.erase(s.begin());
	cout << s;
}

void main()
{
	
	string a = "111111111111111111111111";
	string b = "22222222222222";
	add(a, b);
	system("pause");
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值