求助:高精度板子不对
查看原帖
求助:高精度板子不对
661595
a2lyaXNhbWUgbWFyaXNh楼主2022/8/9 17:13

今天闲来无事摸鱼打算写一个高精度的板子,以后遇到这种题再也不用写高精又臭又长的代码了(好耶)

But!

遇到了问题

不管是高精加还是高精乘都有问题,数据过大会输出莫名其妙的数(数组够大),我是照着深入浅出入门组的代码写的

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;
}

求调,悬赏关注

2022/8/9 17:13
加载中...