非负数的大数加法

#include<bits/stdc++.h>
using namespace std;
int mins(int a,int b)
{
	return a<b?a:b ;
} 
//
string add(string a,string b)
{
	string test="";//返回的字符串 
	int sum[1010];
	int n=0;//进位 
	memset(sum,0,sizeof(sum));
	//
	string res0="",res1="";
	int num4=0,num5=0;
	for(int i=0;i<a.size();i++)
	{
		char tmp=a.at(i);
		if(tmp!='0'||num4!=0)
		{
			num4++;
			res0+=tmp;
		}
		
	}
		for(int i=0;i<b.size();i++)
	{
		char tmp=b.at(i);
		if(tmp!='0'||num5!=0)
		{
			num5++;
			res1+=tmp;
		}
		
	}
	a=res0;
	b=res1;
	//
	int min=mins(a.size(),b.size());
	//
   reverse(a.begin(),a.end());
   reverse(b.begin(),b.end());
   int count=0;//计数器 
 //	
	
	for(int i=0;i<min;i++)
	{
		   char tmp1=a.at(i);
			char tmp2=b.at(i);
			int res=tmp1-'0'+tmp2-'0'+n;
			//
			sum[i]=res%10;
			n=res/10;
			//
			//cout<<n<<endl;
			//看看有多少位数 
			count++;
	}
	//
	if(a.size()>b.size())
	{
		 for(int i=min;i<a.size();i++)
		{
			char temp=a.at(i);
			sum[i]=temp-'0'+n;
			//
			n=sum[i]/10;
			//
			sum[i]=sum[i]%10;
			//cout<<n<<endl;
			//n/=10;
			//
			//cout<<n<<endl;
			count++;
		}
		if(n!=0)
		{
			sum[a.size()-1]=sum[a.size()-1]%10;
			sum[a.size()]=n;
			count++; 
		
		}
		
		int d0=0;
			for(int i=count-1;i>=0;i--)
		{
			//
			//cout<<sum[i]<<endl;
			char tmp=sum[i]+'0';
			if(tmp!=0||d0!=0)
			{
					test+=tmp;
					d0++;
			 } 
			
		}
		if(d0==0)
		{
			return "0";
		}
		return test;
		
	}
	else {
			for(int i=min;i<b.size();i++)
		{
			char temp=b.at(i);
			sum[i]=temp-'0'+n;
			//
			n=sum[i]/10;
			sum[i]=sum[i]%10;
			//cout<<n<<endl;
			count++;
		}
 
		if(n!=0)
		{
			//
				sum[b.size()-1]=sum[b.size()-1]%10;
			//cout<<n<<endl;
			sum[b.size()]=n;
			count++;
			
		}	
			int d1=0;	
		for(int i=count-1;i>=0;i--)
		{
			//cout<<sum[i]<<endl;
			char tmp=sum[i]+'0';
			if(tmp!='0'||d1!=0)
			{
				test+=tmp;
				d1++;
			}
					
		}
		if(d1==0)
		{
			return "0";
		}
		return test;
	}a

 } 
 int main()
 {
 string a,b;
 cin>>a>>b;
 cout<<add(a,b);
// cout<<123+99999;
  } 

000+000

999+123

123+999

00123+999999

999999+00123

重要的测试点,如果你过了,应该没问题//废了老命,QAQ

发布了78 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42333573/article/details/97578980