第一种方法:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a,b;
scanf("%d",&a,&b);
printf("%d",a+b);
}
第二种方法:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
using namespace std;
struct node {
int data, rev, sum;
node *son[2], *pre;
bool judge();
bool isroot();
void pushdown();
void update();
void setson(node *child, int lr);
} lct[233];
int top, a, b;
node *getnew(int x) {
node *now = lct + ++top;
now->data = x;
now->pre = now->son[1] = now->son[0] = lct;
now->sum = 0;
now->rev = 0;
return now;
}
bool node::judge() { return pre->son[1] == this; }
bool node::isroot() {
if (pre == lct)
return true;
return !(pre->son[1] == this || pre->son[0] == this);
}
void node::pushdown() {
if (this == lct || !rev)
return;
swap(son[0], son[1]);
son[0]->rev ^= 1;
son[1]->rev ^= 1;
rev = 0;
}
void node::update() { sum = son[1]->sum + son[0]->sum + data; }
void node::setson(node *child, int lr) {
this->pushdown();
child->pre = this;
son[lr] = child;
this->update();
}
void rotate(node *now) {
node *father = now->pre, *grandfa = father->pre;
if (!father->isroot())
grandfa->pushdown();
father->pushdown();
now->pushdown();
int lr = now->judge();
father->setson(now->son[lr ^ 1], lr);
if (father->isroot())
now->pre = grandfa;
else
grandfa->setson(now, father->judge());
now->setson(father, lr ^ 1);
father->update();
now->update();
if (grandfa != lct)
grandfa->update();
}
void splay(node *now) {
if (now->isroot())
return;
for (; !now->isroot(); rotate(now))
if (!now->pre->isroot())
now->judge() == now->pre->judge() ? rotate(now->pre) : rotate(now);
}
node *access(node *now) {
node *last = lct;
for (; now != lct; last = now, now = now->pre) {
splay(now);
now->setson(last, 1);
}
return last;
}
void changeroot(node *now) {
access(now)->rev ^= 1;
splay(now);
}
void connect(node *x, node *y) {
changeroot(x);
x->pre = y;
access(x);
}
void cut(node *x, node *y) {
changeroot(x);
access(y);
splay(x);
x->pushdown();
x->son[1] = y->pre = lct;
x->update();
}
int query(node *x, node *y) {
changeroot(x);
node *now = access(y);
return now->sum;
}
int main() {
scanf("%d%d", &a, &b);
node *A = getnew(a);
node *B = getnew(b);
//连边 Link
connect(A, B);
//断边 Cut
cut(A, B);
//再连边orz Link again
connect(A, B);
printf("%d\n", query(A, B));
return 0;
}
第三个方法(结构体高精):
#include <bits/stdc++.h>
using namespace std;
struct bignumber {
int len, a[10005];
bignumber() {
memset(a, 0, sizeof(a));
len = 1;
}
void read() {
string s;
cin >> s;
len = s.size();
for (int i = 0; i <= len - 1; i++) a[len - i] = s[i] - '0';
}
void print() {
for (int i = len; i >= 1; i--) cout << a[i];
}
friend bignumber operator+(bignumber x, bignumber y) {
bignumber z;
z.len = max(x.len, y.len);
for (int i = 1; i <= z.len; i++) {
z.a[i] = x.a[i] + y.a[i];
}
return fix(z);
}
friend bignumber fix(bignumber x) {
for (int i = 1; i < x.len; i++) {
x.a[i + 1] += x.a[i] / 10;
x.a[i] %= 10;
}
if (x.a[x.len] > 9) {
x.a[x.len + 1] += x.a[x.len] / 10;
x.a[x.len] %= 10;
x.len++;
}
while (x.len > 1 && x.a[x.len] == 0) x.len--;
return x;
}
};
int main() {
bignumber x, y, z;
x.read();
y.read();
z = x + y;
z.print();
return 0;
}
共 2 条回复
看我多帅
%%