高精度加减法(改良版)

//说明:高精度1.1版本
//添加了 交互 , 高精度减法的负号
#include <iostream>
#include <string>
using namespace std;
int a[100]={0},b[100]={0};
int len1,len2,lenmax;
string s1,s2;
int main()
{
	void input(int a[],int b[]);
	void add(int a[],int b[]);
	void minus(int a[],int b[]);
	char c;//c表示符号
	int i,p=1;
	while (1) //交互
	{
		input(a,b);
		cout<<"请输入符号:";
		cin>>c;
		if (len1>=len2) lenmax=len1;
		else lenmax=len2;
		switch (c)
		{
			case'+':add(a,b);break;
			case'-':minus(a,b);
		}
		cout<<"请问要继续虐待你的计算机吗?(1/0) ";
		cin>>p;
		if (p==0) break;
		c='\0';
		for (i=0;i<len1;i++)
			a[i]=0;
		for (i=0;i<len1;i++)
			b[i]=0;
	}
	cout<<"程序结束,你的计算机终于可以休息啦~呼呼~o(∩_∩)o "<<endl;
	return 0;
}

//********input************
void input(int a[],int b[])
{
	cout<<"请输入两个正整数:"<<endl;
	cin>>s1>>s2;
	int i;
	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};
	for (int i=0;i<lenmax;i++)
	{	
		sum[i]=sum[i]+a[i]+b[i];
		if (sum[i]>=10)
		{
			sum[i+1]+=sum[i]/10;
			sum[i]=sum[i]%10;
		}
	}
	if (sum[lenmax]!=0) cout<<sum[lenmax];
	for (int i=0;i<lenmax;i++)
		cout<<sum[lenmax-1-i];
	cout<<endl;
}
//********减法********
void minus(int a[],int b[])
{
	int sum[100]={0};
	int 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 (int i=0;i<lenmax;i++)
		{
			if (a[i]>=b[i]) sum[i]=sum[i]+a[i]-b[i];
			else 
			{
				a[i+1]-=1;
				sum[i]=a[i]+10-b[i];
			}
		}
	}
	else //a<b
	{
		for (int i=0;i<lenmax;i++)
			{
				if (b[i]>=a[i]) sum[i]=sum[i]+b[i]-a[i];
				else 
				{
					b[i+1]-=1;
					sum[i]=b[i]+10-a[i];
				}
			}
	}
	if (f==0) cout<<'-'; //如果a<b,即是负数,要加一个负号
	if (sum[lenmax-1]!=0) cout<<sum[lenmax-1];
	for (int i=0;i<lenmax-1;i++)  
		cout<<sum[lenmax-2-i];
	cout<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值