高精度加减法

#include <iostream>
#include <string>
int a[100]={0},b[100]={0}; //初始化数组
int len1=0,len2=0,lenmax=0;//输入数字的位数lenmax是指最长的那个数字
using namespace std;
string s1,s2;

int main()
{
	void input(int a[],int b[]);
	void add(int a[],int b[]);
	void minus(int a[],int b[]);
	input(a,b);
	if (len1>=len2) lenmax=len1;
	else lenmax=len2;
//	add(a,b);
	minus(a,b);
	return 0;
}

void input(int a[],int b[])
{
	int i;
	cout<<"请输入两个整数(注意第一位是符号位:1代表正,0代表负)"<<endl;
	cin>>s1>>s2; 
	len1=s1.length();
	len2=s2.length();
	//把字符变成数字,并且将其反转。反转后最后一位变成了符号位
	for (i=0;i<len1;i++)
		a[i]=s1[len1-1-i]-'0';
	for (i=0;i<len2;i++)
		b[i]=s2[len2-1-i]-'0';
/*	for (i=0;i<len1;i++)
		cout<<a[i]<<' ';
	cout<<endl;
	for (i=0;i<len2;i++)
		cout<<b[i]<<' ';
	cout<<endl;*/
}

//********************************************高精度加法*****************************************************
void add(int a[],int b[])
{
	int sum[100]={0};
	int i,lenend=0;//lenend为结构的位数
	for (i=0;i<lenmax;i++) //加法
	{
		lenend++;
		sum[i]=sum[i]+a[i]+b[i];
		sum[i+1]=sum[i]/10;  //**这里注意了了!!!要先算了下一位再来求余数,因为都要用到sum[i]本身**
		sum[i]=sum[i]%10;
	}
	if (sum[lenend]!=0) cout<<sum[lenend];
	for (i=lenend-1;i>=0;i--)
			cout<<sum[i];
		cout<<endl;
}


//********************************************高精度减法*****************************************************
void minus(int a[],int b[])
{
	int sum[100]={0};
	int i,lenend=0,f;//f=1表示a>b,f=0表示a<b
	if (len1>len2) f=1;
	else if (len1<len2) f=0;
	else if	(s1>s2) f=1;
	else if (s1<s2) f=0;
	if (f) //如果a>b
	{
		for (i=0;i<lenmax;i++)
		{
			lenend++;
			if (a[i]>=b[i]) sum[i]=a[i]-b[i];//
			else //借位处理
			{
				a[i+1]-=1;
				sum[i]=a[i]+10-b[i];
			}	
		}
	}
	else //a<b
	{
		for (i=0;i<lenmax;i++)
		{
			lenend++;
			if (b[i]>=a[i]) sum[i]=b[i]-a[i];
			else 
			{
				b[i+1]-=1; //借位处理
				sum[i]=b[i]+10-a[i];
			}
		}
	}
	if (sum[lenend-1]!=0) cout<<sum[lenend-1];
	for (i=lenend-2;i>=0;i--)
			cout<<sum[i];
	cout<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值