【天梯】高精度-3115 高精度练习之减法

题目描述  Description

给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。

输入描述  Input Description

读入两个用空格隔开的正整数

输出描述  Output Description

输出A-B的值

样例输入  Sample Input

3 12

样例输出  Sample Output

-9

数据范围及提示  Data Size & Hint

两个正整数的位数不超过500位

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
    char a[510],b[510];
    int la,lb,l;
    int fa[510]={0},fb[510]={0};
    cin>>a>>b;
	la=strlen(a);
	lb=strlen(b);
	l=max(la,lb);
	for(int i=0;i<la;i++)
	{
		fa[la-i]=int(a[i])-'0';
	}
	for(int i=0;i<lb;i++)
	{
		fb[lb-i]=int(b[i])-'0';
	}
	
	int k,t=0;
	for(int i=l;i>=1;i--)
	{
		if(fb[i]>fa[i]){k=1;break;}
		if(fb[i]<fa[i]){k=0;break;}
		if(fb[i]==0){continue;}
	}
	if(k==0)
	{
		for(int i=1;i<l;i++)
		{
			fa[i]=fa[i]-fb[i]-t;
			t=0;
			if(fa[i]<0){t=1;fa[i]=fa[i]+10;}
		}
		fa[l]=fa[l]-fb[l]-t;
		for(int i=l;i>0;i--)
		{
			cout<<fa[i];
		}
	}
	else
	{
		for(int i=1;i<l;i++)
		{
			fa[i]=fb[i]-fa[i]-t;
			t=0;
			if(fa[i]<0){t=1;fa[i]=fa[i]+10;}
		}
		fa[l]=fb[l]-fa[l]-t;
		cout<<'-';
		bool pd=true;
		for(int i=l;i>0;i--)
		{
			if(fa[i]==0&&pd){continue;}
			cout<<fa[i];
			pd=false;
		}
		
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_36718092/article/details/80549043