# 蒟蒻的第一篇题解
## 各位大神们见谅
这是一题~~非非非非非常难~~的一道题
蒟蒻这里把自己会的都给大家双手奉上
### 按自己的喜好选择
## 01.蒟蒻们的做法
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}
```
这……(大神可以直接跳过)
“cin>>”代表输入
“cout<<”代表输出
#include<bits/stdc++>是cpp语言的头文件名,功能较多
#include<iostream>是cpp语言的另一种头文件名,速度更快
(蒟蒻更喜欢第一种一些)
## 02.想进步的蒟蒻
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",&a+b);
return 0;
}
```
还是一样,就是把cin换成了scanf,把cout换成了printf
意思都一样
## 03.模拟算法
```cpp
#include<bits/stdc++.h>
using namespace std;
int fu=1,f=1,a,b,c=0;
int main(){
cin>>a>>b;
if(a<0&&b>0)fu=2;
if(a>0&&b<0)fu=3;
if(a<0&&b<0)f=-1;
if(a==0){cout<<b;return 0;}
if(b==0){cout<<a;return 0;}
a=abs(a);
b=abs(b);
if(a>b&&fu==3)f=1;
if(b>a&&fu==3)f=-1;
if(b>a&&fu==2)f=1;
if(b<a&&fu==2)f=-1;
if(fu==1)c=a+b;
if(fu>1)c=max(a,b)-min(a,b);
c*=f;
cout<<c;
return 0;
}
```
大家自己看着办吧……(建议蒟蒻就用前两种方法)
## 04.高精度算法
#### (我估计没有人想用这种方法)
高精度就是用多大的都行
蒟蒻这里开的是20000的数组
简单来说就是
1000000000000………………00
19999个零这么大
(蒟蒻建议大家也别那么没事干,搞坏了跟用#include<con>或shutdown差不多了)
别怪蒟蒻没提醒,千万不要用上面那俩家伙
不然这是在你重启之前最后看到我的最后一面了
```cpp
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int N=20000;
struct bigN{
int len;
int num[N];
bigN(){
len=0;
memset(num,0,sizeof(int)*N);
}
bigN(int a){
len=0;
memset(num,0,sizeof(int)*N);
while(a>0){
num[len++]=a%10;
a/=10;
}
}
bigN(char a[]){
len=strlen(a);
memset(num,0,sizeof(int)*N);
for(int i=0; i<len; i++){
num[i]=a[len-i-1]-'0';
}
}
void print(){
for(int i=len-1; i>=0; i--){
printf("%d",num[i]);
}
}
};
bigN shift(bigN a){
for(int i=0; i<a.len-1; i++){
if(a.num[i]<0){
a.num[i]+=10;
a.num[i+1]-=1;
}
a.num[i+1]+=a.num[i]/10;
a.num[i]%=10;
}
if(a.num[a.len]!=0){
a.len++;
}
while(a.num[a.len-1]>=10){
a.num[a.len] +=a.num[a.len-1]/10;
a.num[a.len-1]%=10;
a.len++;
}
while(a.len>1&&a.num[a.len-1]==0){
a.len--;
}
return a;
}
bigN operator+(bigN a,bigN b){
bigN c;
c.len=max(a.len,b.len);
for(int i=0; i<c.len; i++){
c.num[i]=a.num[i]+b.num[i];
}
return shift(c);
}
int main(){
char a[1024];
scanf("%s",a);
bigN bb=a;
scanf("%s",a);
bigN bc=a;
bc=bb+bc;
bc.print();
return 0;
}
```
###### 这里蒟蒻就给大家讲~~亿~~点
memset有很多人用着用着就不知道是什么了
蒟蒻再次提醒大家:是把某个数据(或数组)初始化一下
## 05.高精度算法(简化版)
```cpp
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
string str1,str2;
int a[1010],b[1010];
int len;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>str1>>str2;
a[0]=str1.length();
b[0]=str2.length();
for(int i=1; i<=a[0]; i++){
a[i]=str1[a[0]-i]-'0';
}
for(int i=1; i<=b[0]; i++){
b[i]=str2[b[0]-i]-'0';
}
len=max(a[0],b[0]);
for(int i=1; i<=len; i++){
a[i]=a[i]+b[i];
a[i+1]=a[i+1]+a[i]/10;
a[i]%=10;
}
len++;
while(a[len]==0&&len>1){
len--;
}
for(int i=len; i>=1; i--){
cout<<a[i];
}
return 0;
}
```
#### 这里是跟高精度一样的用处
## 好了,这就是蒟蒻的第一篇题解
## 欢迎和蒟蒻一起讨论