题解 P1601 【A+B Problem(高精)】
Starlight_Glimmer · · 题解
曾经很讨厌高精度,因为它很长,不好记,而且在不是很单纯的题目里面感觉很烦(一个数就是一个数组)。在一道题目中出现的时候总是用一些奇技淫巧混过去(比如把两个long long拼在一起)。 现在...还是正视了这个问题,有时候该写还是要写的(毕竟联赛不能用_int128什么的)抽空把它搞成了一个结构体封装的形式,看起来要清爽一些。 就从这个小水题开始吧:
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
#define N 505
#define ll long long
#define INF 0x3f3f3f3f
struct BT//BigInt
{
int a[N],len;
BT()//初始化
{
memset(a,0,sizeof(a));
len=1;
}
BT operator + (const BT &A)const
{
BT B;
B.len=max(len,A.len);
for(int i=0;i<B.len;i++)
{
B.a[i]+=A.a[i]+a[i];
if(B.a[i]>=10)
{//进位 9+9=18 进位不会超过10
B.a[i]-=10;
B.a[i+1]++;
}
}
if(B.a[B.len])//进到了下一位
B.len++;
return B;
}
void read()
{
char d[N];
scanf("%s",d);
int l=strlen(d);
for(int i=0;i<l;i++)
a[i]=d[l-i-1]-'0';
len=l;
}
void write()
{
for(int i=len-1;i>=0;i--)
printf("%d",a[i]);
}
};
BT S,G,L;
int main()
{
S.read();
G.read();
L=S+G;
L.write();
return 0;
}
(突然发现BT也是BianTai 啊,说出了我的心声