1005 大数加法 51nod题解

1005 大数加法 51nod题解_第1张图片

输入

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

输出

输出A + B

输入样例

68932147586
468711654886

输出样例

537643802472

 

此题需要细心。划分为0+0 、两个正数或者两个负数相加、一正一负相加3种情况。

用到了比较多的字符串处理

#include 
#include
#include
#include
#include
#include
using namespace std;

string a,b;

int lena,lenb;
void zadd(){
	int da=max(lena,lenb);
	
reverse(a.begin(),a.end());	  
reverse(b.begin(),b.end());
  //高位添零;
if(lenatb.length()){
		cout<<"-";
		return true;
	}
	else if(ta.length()tb[i]){
	     cout<<"-";	 return true;
      	}
		else return false;
    	}
	}
}

void doJian(string da,string xiao){
	//	 cout<<"初始:da:"<>a>>b;
lena=a.length();
lenb=b.length();
  if(a[0]!='-'&&b[0]!='-'){//都是正数; 
    if(a=="0"&&b=="0") cout<<"0"; 
  	else zadd();
  }
 else if(a[0]=='-'&&b[0]=='-'){
  	a[0]='0';
  	b[0]='0';
  	cout<<"-";
  	zadd();
  }
  else {
  //a为负数 
    string a1=a.substr(1,a.length()-1);
    string b1=b.substr(1,b.length()-1);
     if((a1==b&&a[0]=='-')||(b1==a&&b[0]=='-'))
       cout<<"0";
     else jian();
  } 
}

1005 大数加法 51nod题解_第2张图片

你可能感兴趣的:(c++题解)