今天闲来无事摸鱼打算写一个高精度的板子,以后遇到这种题再也不用写高精又臭又长的代码了(好耶)
遇到了问题
不管是高精加还是高精乘都有问题,数据过大会输出莫名其妙的数(数组够大),我是照着深入浅出入门组的代码写的
Code:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(int x){
if(x<0)
putchar('-'),x=-x;
if(x>9){
write(x/10);
}
putchar(x%10 +'0');
}
struct bigint{
int len,a[maxn];
inline bigint(int x=0){
memset(a,0,sizeof(a));
for(len=1;x;len++){
a[len]=x%10;
x/=10;
}
len--;
}
int &operator [](int i){
return a[i];
}
inline void flatten(int l){
len=l;
for(int i=1;i<len;i++)a[i+1]+=a[i]/10,a[i]%=10;
while(!a[len])len--;
}
inline void putbig(){
for(int i=max(len,1);i>=1;i--){
write(a[i]);
}
}
};
bigint operator+(bigint a,bigint b){
bigint c;
int len =max(a.len,b.len);
for(int i=1;i<=len;i++){
c[i]+=a[i]+b[i];
}
c.flatten(len+1);
return c;
}
bigint operator*(bigint a,bigint b){
bigint c;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++){
c[i+j]=c[i+j]+a[i]*b[j];
}
}
c.flatten(a.len+b.len);
return c;
}
int main(){
return 0;
}
求调,悬赏关注