C++中的const使用

C++面向对象编程(下)

  返回  

高精a+b

2021/8/21 20:07:20 浏览:

目录

    • 题目大意
    • 解题思路
    • 代码实现
      • 内置方法
      • 高精度
    • 样例1
      • 输入
      • 输出
    • 样例2
      • 输入
      • 输出
    • 样例3
      • 输入
      • 输出

题目大意

输入a,b,输出 a + b a+b a+b

解题思路

这一题,数据范围很小,可以使用c++内置的加法,但也可以使用高精度算法。

代码实现

内置方法

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long a,b;
	cin>>a>>b;//输入a,b,cin属于iostream库,还要使用命名空间std
	cout<<a+b;//输出a+b的和,cout属于iostream库,还要使用命名空间std
}

高精度

#include<bits/stdc++.h>
using namespace std;
string a,b;
string jia(string jia1,string jia2)
{
	string a[3],ans="";
	bool flag=false;
	int d=0,l=0,jsa=0,jsb=0,t=0,c=0;
	a[1]=jia1;
	a[2]=jia2;
	if(a[1].size()>a[2].size())
		d=2;
	else
		d=1;
	l=max(a[1].size(),a[2].size())-min(a[1].size(),a[2].size());
	for(int i=1;i<=l;i++)
		a[d]="0"+a[d];
	a[1]='0'+a[1];
	a[2]='0'+a[2];
	for(int i=a[1].size()-1;i>=0;i--)
	{
		jsa=a[1][i]-'0';
		jsb=a[2][i]-'0';
		t=jsa+jsb+c;
		c=t/10;
		a[0]=a[0]+char(t%10+48);
	}
	int j=a[0].size()-1;
	if(a[0][a[0].size()-1]=='0')
		j--;
	for(int i=j;i>=0;i--)
		ans+=a[0][i];
	return ans;
}
string jian(string jian1,string jian2)
{
	int d=0,l=0,jw=0,t=0;
	string a[3],ans="";
	bool flag=false;
	a[1]=jian1;
	a[2]=jian2;
	if(a[2][0]=='-')
		if(a[1][0]=='-')
			ans+="-",a[1]=a[1].substr(1,a[1].size()-1),a[2]=a[2].substr(1,a[2].size());
		else
			return jia(a[1],a[2].substr(1,a[2].size()-1));
	else if(a[1][0]=='-')
		return "-"+jia(a[1].substr(1,a[1].size()-1),a[2]);
	if(a[1].size()==a[2].size()&&a[1]<a[2]||a[1].size()<a[2].size())
	{
		ans+="-";
		swap(a[1],a[2]);//a-b=-(b-a)
	}
	if(a[1].size()>a[2].size())
		d=2;
	else
		d=1;
	l=max(a[1].size(),a[2].size())-min(a[1].size(),a[2].size());
	for(int i=1;i<=l;i++)
		a[d]="0"+a[d];
	for(int i=a[1].size()-1;i>=0;i--)
	{
		if((a[1][i]-'0')<(a[2][i]-'0')+jw)
		{
			t=(a[1][i]-'0')+10-jw-(a[2][i]-'0');
			jw=1;
		}
		else
		{
			t=(a[1][i]-'0')-jw-(a[2][i]-'0');
			jw=0;
		}
		a[1][i]=char(t+'0');
	}
	int j=0;
	while(a[1][j]=='0'&&j<a[1].size()-1) j++;
	for(int i=j;i<a[1].size();i++)
		ans+=a[1][i];
	if(ans[1]=='-')
		ans=ans.substr(2,ans.size()-2);
	if(ans.substr(0,2)=="-0")
		ans=ans.substr(1,ans.size()-1);
	return ans;
} 
int main()
{
	cin>>a>>b;
	if(b[0]=='-')
	{
		cout<<jian(a,b.substr(1,b.size()));//加上负数->减去正数
	}
	else
	{
		cout<<jian(a,"-"+b);//加上正数->减去负数
	}
}

样例1

输入

10 21

输出

31

样例2

输入

10 -21

输出

-11

样例3

输入

30 -21

输出

9

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号