1065 A+B and C 字符串加减运算?待修改

本文介绍了一个用于处理字符串形式的大整数加法的算法实现。该算法能够处理正负数的加法运算,并通过示例代码详细展示了不同情况下的处理逻辑,如两个正数相加、两个负数相加及一正一负数相加的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream> 
using namespace std;
string _sum(string a,string b){
	int flag=0;
	if(a[0]=='-'&&b[0]=='-'){
		flag=1;
		a=a.substr(1,a.length());
		b=b.substr(1,b.length());
		string result;
		int carry=0;
		int len=max(a.length(),b.length());
		while(a.length()<len){
			a='0'+a;
		}
		while(b.length()<len){
			b='0'+b;
		}
		for(int i=len-1;i>=0;i--){
			int sum=a[i]-'0'+b[i]-'0'+carry;
			if(sum>=10){
				sum=sum-10;
				carry=1;
			}else{
				carry=0;
			}
			result=result+to_string(sum);
		}
		if(carry==1)
		result=to_string(carry)+result;
		return '-'+result;
	}else if(a[0]!='-'&&b[0]!='-'){
		flag=0;
		string result;
		int carry=0;
		int len=max(a.length(),b.length());
		while(a.length()<len){
			a='0'+a;
		}
		while(b.length()<len){
			b='0'+b;
		}
		for(int i=len-1;i>=0;i--){
			int sum=a[i]-'0'+b[i]-'0'+carry;
			if(sum>=10){
				sum=sum-10;
				carry=1;
			}else{
				carry=0;
			}
			result=result+to_string(sum);
		}
		if(carry==1)
		result=to_string(carry)+result;
		return result;
	}else if((a[0]=='-'&&b[0]!='-')||(a[0]!='-'&&b[0]=='-')){
		if(a[0]!='-'&&b[0]=='-'){
			string temp=b;
			b=a;
			a=temp;
		}
		string result;
		a=a.substr(1,a.length());
		int carry=0;
		int len=a.length();
		for(int i=len-1;i>=0;i--){
			int sum=b[i]-'0'-(a[i]-'0')+carry;
			if(sum<0){
				sum=sum+10;
				carry=-1;
			}else{
				carry=0;
			}
			result=to_string(sum)+result;
		}
		if(carry==-1)
		result='-'+result;
		return result;//绝对值大的减去绝对值小的数...待修改 
	}
}
int main() 
{
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		string a,b,c;
		cin>>a>>b>>c;
		string result=_sum(a,b);
		//cout<<result<<endl;
		if(c[0]!='-')
		c='-'+c;
		else
		c=c.substr(1,c.length());
		result=_sum(result,c);
		//cout<<result<<endl;
		if(result[0]!='-'&&stoi(result)!=0){
			cout<<"Case #"<<i+1<<": "<<"true"<<endl;
		}else{
			cout<<"Case #"<<i+1<<": "<<"false"<<endl;
		}
	}
	return 0;
}
#include<iostream> 
using namespace std;
string _sum(string a,string b){
	int flag=0;
	if(a[0]=='-'&&b[0]=='-'){
		flag=1;
		a=a.substr(1,a.length());
		b=b.substr(1,b.length());
		string result;
		int carry=0;
		int len=max(a.length(),b.length());
		while(a.length()<len){
			a='0'+a;
		}
		while(b.length()<len){
			b='0'+b;
		}
		for(int i=len-1;i>=0;i--){
			int sum=a[i]-'0'+b[i]-'0'+carry;
			if(sum>=10){
				sum=sum-10;
				carry=1;
			}else{
				carry=0;
			}
			result=result+to_string(sum);
		}
		if(carry==1)
		result=to_string(carry)+result;
		return '-'+result;
	}else if(a[0]!='-'&&b[0]!='-'){
		flag=0;
		string result;
		int carry=0;
		int len=max(a.length(),b.length());
		while(a.length()<len){
			a='0'+a;
		}
		while(b.length()<len){
			b='0'+b;
		}
		for(int i=len-1;i>=0;i--){
			int sum=a[i]-'0'+b[i]-'0'+carry;
			if(sum>=10){
				sum=sum-10;
				carry=1;
			}else{
				carry=0;
			}
			result=result+to_string(sum);
		}
		if(carry==1)
		result=to_string(carry)+result;
		return result;
	}else if((a[0]=='-'&&b[0]!='-')||(a[0]!='-'&&b[0]=='-')){
		if(a[0]!='-'&&b[0]=='-'){
			string temp=b;
			b=a;
			a=temp;
		}
		string result;
		a=a.substr(1,a.length());
		if(a.length()>b.length()){
			result="-1";
			return result;
		}else if(a.length()<b.length()){
			result="1";
			return result;
		}else if(a.length()==b.length()){
			int flag=0;
			for(int i=0;i<a.length();i++){
				if(a[i]==b[i]){
					continue;
				}else if(a[i]<b[i]){
					result="1";flag=1;
					break;
				}else if(a[i]>b[i]){
					result="-1";flag=1;
					break;
				}
			}
			if(flag==0) result="0";
			return result;
		}
		/*int carry=0;
		int len=a.length();
		for(int i=len-1;i>=0;i--){
			int sum=b[i]-'0'-(a[i]-'0')+carry;
			if(sum<0){
				sum=sum+10;
				carry=-1;
			}else{
				carry=0;
			}
			result=to_string(sum)+result;
		}
		if(carry==-1)
		result='-'+result;
		return result;*/
	}
}
int main() 
{
	#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		string a,b,c;
		cin>>a>>b>>c;
		string result=_sum(a,b);
		cout<<result<<endl;
		if(c[0]!='-')
		c='-'+c;
		else
		c=c.substr(1,c.length());
		result=_sum(result,c);
		cout<<result<<endl;
		if(result[0]!='-'&&stoi(result)!=0){
			cout<<"Case #"<<i+1<<": "<<"true"<<endl;
		}else{
			cout<<"Case #"<<i+1<<": "<<"false"<<endl;
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值