高精度减法

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
int a[201] = {0}, b[201] = {0};
int i, la, lb;
char al[201], bl[201];
bool flag = 1;
gets(al);
la = strlen(al);
gets(bl);
lb = strlen(bl);
if(la < lb)
{
flag = 0;
swap(al,bl);
}
// 若a比b位数少,则交换并标记
if(la == lb)
{
for(i = 1;i <= la;i++)
{
if(al[i] < bl[i])
{
swap(al,bl);
flag = 0;
break;
}
}
}
// 若a和b位数一样,则从最高位开始比较a和b同位数字的大小
for(i = 0;i < la;i++) a[i] = al[la-i-1] - '0';
for(i = 0;i < lb;i++) b[i] = bl[lb-i-1] - '0';
for(i = 0;i < la;i++)
{
if(a[i] < b[i])
{
a[i+1]--;
a[i] += 10;
}
a[i] = a[i] - b[i];
}
// 减法与借位
while(!a[la-1])
{
la--;
if(!la)
{
printf("0");
break;
}
}
// 删除前导0
if(flag = 0) printf("-");
for(i = la - 1;i >= 0;i--)
{
printf("%d",a[i]);
}
return 0;
}

原文地址:https://www.cnblogs.com/thx666/p/8321018.html