A-B 高精度

    类似加法,同样可以用竖式做减法。在做减法时需要注意的是:当被减数比减数大,输出为负数,同时要处理借位。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int i,j,len,x[110000],y[110000],n1,n2,jw=0,o;
char a[110000],b[110000],c[110000];
int main()
{
	cin>>a>>b;
	n1=strlen(a);
	n2=strlen(b);
	if(n1<n2||strcmp(a,b)<0&&n1==n2)//如果n1<n2那么减数比被减数小,结果为负数,如果位数一样,那么用strcmp一位一位比较(1)
	{
		strcpy(c,a);//用strcpy把a,b数组的值交换(2)
		strcpy(a,b);
		strcpy(b,c);  
		cout<<"-";//输出负号 
		x[i]=y[i]-x[i];
		o=n1;//n1,n2交换 
		n1=n2;
		n2=o;
	}
	for(i=0;i<n1;i++)
	{
		x[i]=a[n1-1-i]-'0';//倒序存储 
	}
	for(i=0;i<n2;i++)
	{
		y[i]=b[n2-1-i]-'0';
	}
	len=max(n1,n2);
	for(i=0;i<len;i++)
	{
		x[i]=x[i]-y[i]-jw;
		if(x[i]<0&&y[i]>x[i])//如果小于0 
		{
			x[i]=x[i]+10;//当前加10 
			x[i+1]=x[i+1]-1;//下一位-1 
		}
		x[i]=x[i]%10;
	}
	int f=i;
	while(x[f]==0)//去0 
	{
		f--;
	}
    for(i=f;i>=0;i--)cout<<x[i];
    if(f<0) cout<<0;
}

  

  (1):strcmp

       (2):strcpy

posted @ 2018-07-03 16:09  DJY_01  阅读(190)  评论(0编辑  收藏  举报