高精度计算(三) /*高精度的减法运算*/
高精度的减法运算
求两个大的正整数相减的差。
输入:
共 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;
}