给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586
468711654886
Output示例
537643802472
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
const int N = 10100;
char a[N], b[N];
int x[N], w[N];
int alen, blen;
int xlen, wlen;
bool xf, wf;
// xf = 0 数A为正数,反之为负数; wf 同理
void Standard();
// 将 a[] 去掉符号位存入 x[]
// 将 b[] 去掉符号位存入 w[]
void Add(); // 两个数相加
void Sub(); // 两个数相减
int Max();
// 比较正数A, B 谁更大 , A大返回1 ,B大返回2, 相等返回0
int main()
{
cin >> a >> b;
alen = strlen(a), blen = strlen(b);
memset(w, 0, sizeof(w));
memset(x, 0, sizeof(x));
Standard();
if(!xf && !wf) {
Add();
}
else if(xf && wf) {
cout << "-";
Add();
}
else {
int res = Max();
if(res == 0){
cout << "0";
}
else if((xf && res == 1) || (wf && res == 2)) {
cout << '-';
Sub();
}
else {
Sub();
}
}
return 0;
}
int Max() {
if(xlen > wlen) {
return 1;
}
if(xlen < wlen) {
return 2;
}
for(int i=xlen-1; i>=0; i--) {
if(x[i] > w[i])
return 1;
if(w[i] > x[i])
return 2;
}
return 0;
}
void Sub() {
if(Max() == 1) {
for(int i=0; i<xlen; i++) {
x[i] = x[i]-w[i];
if(x[i] < 0) {
x[i] += 10;
-- x[i+1];
}
}
int temp = xlen;
while(x[temp]==0){
temp--;
}
for(int i=temp; i>=0; i--) {
cout << x[i];
}
}
else {
for(int i=0; i<wlen; i++) {
w[i] = w[i]-x[i];
if(w[i] < 0) {
w[i] += 10;
-- w[i+1];
}
}
int temp = wlen;
while(w[temp]==0){
temp--;
}
for(int i=temp; i>=0; i--) {
cout << w[i];
}
}
}
void Add() {
if(xlen >= wlen) {
for(int i=0; i<xlen; i++) {
x[i] += w[i];
if(x[i] >= 10) {
x[i] %= 10;
x[i+1] ++;
}
}
if(x[xlen] > 0)
cout << x[xlen];
for(int i=xlen-1; i>=0; i--) {
cout << x[i];
}
}
else {
for(int i=0; i<wlen; i++) {
w[i] += x[i];
if(w[i] >= 10) {
w[i] %= 10;
++ w[i+1];
}
}
if(w[wlen] > 0)
cout << w[wlen];
for(int i=wlen-1; i>=0; i--) {
cout << w[i];
}
}
}
void Standard() {
int t = alen;
if(isdigit(a[0])) {
xlen = alen;
xf = 0;
for(int i=0; i<alen; i++) {
x[i] = a[--t] - '0';
}
}
else {
xf = 1;
xlen = alen-1;
for(int i=0; i<xlen; i++) {
x[i] = a[--t] - '0';
}
}
t = blen;
if(isdigit(b[0])) {
wf = 0;
wlen = blen;
for(int i=0; i<blen; i++) {
w[i] = b[--t] - '0';
}
}
else {
wf = 1;
wlen = blen-1;
for(int i=0; i<wlen; i++) {
w[i] = b[--t] - '0';
}
}
}