大数运算(加法)

发布于 2017-11-24  769 次阅读


一个写的很垃圾的高精度a+b。。。

高精度加法主要就是就是把数字中的每一位数字分别存入数组中然后在把对应位置的数相加,然后判断是否需要进位处理即可

代码

#include 
#include 
#include 
using namespace std;
int sum[1000]; // 保存答案 
int main()
{
	int cnt = 0, i;
	string a, b, c; // c用来保存0 
	cin >> a >> b;
	if(b > a && a.length() == b.length()) // 如果b大于a交换a,b的值 
		swap(a,b);
	if(b.length() > a.length())
		swap(a,b);
	//cout << a << ' ' << b << endl;
	for(int i = b.length(); i < a.length(); i++) // 用c中0的个数为a的长度-b的长度 
		c += '0';
	b = c + b; // 把c拼接在b前面
	//cout << a << ' ' << b << endl;
	for(int i = a.length() - 1; i >= 0; i--)
	{
		sum[cnt] += a[i] + b[i] - '0' - '0';
		while(sum[cnt] >= 10) // 满10进位 
		{
			sum[cnt] -= 10;
			sum[cnt + 1]++;
		}
		cnt++;
	}
	for(i = cnt; i >= 0; i--) // 忽略前导0 
		if(sum[i] != 0)
			break;
	for(; i >= 0; i--)  
		cout << sum[i];
	if(a[0] == '0' && b[0] == '0') // 0+0的情况 
		cout << 0;
	cout << endl;				
}