高精度的减法运算
求两个大的正整数相减的差。
输入:
共 2 行,第 1 行是被减数 a,第 2 行是减数 b(a > b)。每个大整数不超过 200 位, 不会有多余的前导零。
输出:
一行,即所求的差。
样例输入 9999999999999999999999999999999999999
9999999999999
样例输出 9999999999999999999999990000000000000
题目来源:http://noi.openjudge.cn/ch0106/11/
分析:
1、借位问题;
for (int i=1;i<=la;i++)
{
if (a[i]<b[i])
{
a[i+1]--;
a[i]+=10;
}
a[i]-=b[i];
}
 2、输出时去掉前面多余的 0。 while (a[la]==0&&la>1)la--; 
 
程序实现:
//高精度减法运算 
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s1[300], s2[300], s3[300];
int a[300], b[300];
int main()
{
	int la, lb, m=0;
	cin >> s1 >> s2;
	la = strlen(s1);
	lb = strlen(s2);
	if(strcmp(s1, s2) == 0)
	{
		cout << 0;
		return 0;
	}
	if(la<lb || la==lb && strcmp(s1, s2)<0 )
	{
		cout << "-";
		strcpy(s3, s1);
		strcpy(s1, s2);
		strcpy(s2, s3);
	}
	la = strlen(s1);
	lb = strlen(s2);
	for(int i=1;i<=la;i++)
		a[i] = s1[la-i] - 48;
	for(int i=1;i<=lb;i++)
		b[i] = s2[lb-i] - 48;
	for(int i=1;i<=la;i++)
	{
		if(a[i] < b[i])
		{
			a[i+1]--;
			a[i] += 10;
		}
		a[i] -= b[i];
	}
	
	while(a[la] == 0 && la>1)
		la--;
	for(int i=la;i>=1;i--)
		cout << a[i];
	cout << endl;
	
	return 0;
}
原文:http://www.cnblogs.com/sineagle/p/6014414.html