51Nod 1005大数加法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/83211230

给出2个大整数A,B,计算A+B的结果。

Input

第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)

Output

输出A + B

Input示例

68932147586
468711654886

Output示例

537643802472

简单的模拟题,加法减法,分类有点麻烦,内含去0的小技巧。

#include<iostream>
#include<string>
using namespace std;
void sum(string a,string b,int temp)
{
	if(a.length()==b.length())
	{
		if(a.compare(b)==-1)
		{
			string t;
			t=a;
			a=b;
			b=t;
		}	
	}else if(a.length()<b.length())
	{
			string t;
			t=a;
			a=b;
			b=t;
	}	
	string t="0";
	t+=a;
	a=t;
	int i,j;
	for(i=a.length()-1,j=b.length()-1;j>=0;j--,i--)
	{
//		cout<<a[i]<<" "<<b[j]<<endl;
		if((a[i]+b[j]-'0')>'9')
		{
			a[i-1]++;
			a[i]=a[i]+b[j]-'9'-1;
		}
		else
			a[i]+=b[j]-'0';
	}
	for(i=a.length()-1;i>=0;i--)
	{
		if(a[i]>'9')
		{
			a[i-1]++;
			a[i]=a[i]-10;
		}
	}
	while(a[0]=='0')
		if(a.length()!=1) 
			a.erase(0,1);
		else
			break;
	if(temp==1)
		cout<<a<<endl;
	else
		cout<<"-"<<a<<endl;
}
void sub(string a,string b,int temp)
{
	if(a.length()==b.length())
	{
		if(a.compare(b)==-1)
		{
			string t;
			t=a;
			a=b;
			b=t;
		}	
	}else if(a.length()<b.length())
	{
			string t;
			t=a;
			a=b;
			b=t;
	}		
	int i,j;
	for(i=a.length()-1,j=b.length()-1;j>=0;j--,i--)
	{
//		cout<<a[i]<<" "<<b[j]<<endl;
		if((a[i]-b[j]+'0')<'0')
		{
			a[i-1]--;
			a[i]=a[i]-b[j]+'9'+1;
		}
		else
			a[i]-=b[j]-'0';
	}
	for(i=a.length()-1;i>=0;i--)
	{
		if(a[i]<'0')
		{
			a[i-1]--;
			a[i]=a[i]+10;
		}
	}
	while(a[0]=='0')
		if(a.length()!=1) 
			a.erase(0,1);
		else
			break;
	if(a=="0")
		cout<<a<<endl;
	else
	{
		if(temp==1)
			cout<<a<<endl;
		else
			cout<<"-"<<a<<endl;
	}	
}
int main()
{
	string a,b;
	cin>>a>>b;
	if(a[0]!='-'&&b[0]!='-')
		sum(a,b,1);
	else if(a[0]=='-'&&b[0]=='-')
	{
		a.erase(0,1);
		b.erase(0,1);
		sum(a,b,2);
	}		
	else if(a[0]=='-')
	{
		a.erase(0,1);
		if(a.length()==b.length())
		{
			if(a.compare(b)==1)
				sub(a,b,2);
			else
				sub(a,b,1);
		}
		else if(a.length()<b.length())
			sub(a,b,1);		
		else
			sub(a,b,2);
	}
	else
	{
		b.erase(0,1);
		if(a.length()==b.length())
		{
			if(a.compare(b)==1)
				sub(a,b,1);
			else
				sub(a,b,2);
		}
		else if(a.length()>b.length())
			sub(a,b,1);
		else
			sub(a,b,2);
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/83211230
今日推荐