大数加法(C++String版本,含负数)

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

Input

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

Output

输出A + B

Sample Input

68932147586
468711654886

Sample Output

537643802472

C++版本的,我分了三种情况1:全正,2:全负,3:一正一负,看起来稍微有点长:

#include
#include
#include 
#include
using namespace std;
string Plus(string a,string b){
	string temp="",ans="";  //temp是可能带前缀0的半成品 ,ans是返回结果 
	int *A,*B;     //数字数组 
	if(a[0]!='-'&&b[0]!='-'){
		if(a.length()=0;i--){
			A[i]+=B[i];
			if(A[i]>9){
				A[i]-=10;
				A[i-1]++;
			}	
		} 
	    
		if(A[0]!=0)
		temp+=(A[0]+'0');
		for(int i=1;i<=n;i++){
			temp+=(A[i]+'0');
		}
	}
	else if(a[0]=='-'&&b[0]=='-'){  //a,b都是负数,直接模拟加法 
	    temp+='-';
		if(a.length()=0;i--){
			A[i]+=B[i];
			if(A[i]>9){
				A[i]-=10;
				A[i-1]++;
			}	
		}  
		if(A[0]!=0)
		temp+=(A[0]+'0');
		for(int i=1;i=0;i--){
				B[i]-=A[i];
				if(B[i]<0){
				   B[i]+=10;
				   B[i-1]--;	
				}
			}
			if(B[0]!=0){
				temp+=(B[0]+'0');
			}
			for(int i=1;in){                   //m是c的长度 / n是b的长度 
			A=new int[m];
			B=new int[m];
			temp+='-';
			for(int i=0;i=0;i--){
				A[i]-=B[i];
				if(A[i]<0){
				   A[i]+=10;
				   A[i-1]--;
				}
			}
			if(A[0]!=0){
				temp+=(A[0]+'0');
			}
			for(int i=1;ib) temp+='-';   //负数绝对值大,temp肯定是负 
			    
			    if(c=0;i--){
					A[i]-=B[i];
					if(i>=1&&A[i]<0){   //第一位就不用判断了,最小也只可能是0 
						A[i]+=10;
						A[i-1]--; 
					}
				}
				if(A[0]!=0){
				temp+=(A[0]+'0');
		     	}
			    for(int i=1;i>a>>b){
		cout<

 

你可能感兴趣的:(字符串处理,数学,学习笔记)