20分求调
查看原帖
20分求调
1156169
liuxuanrui000楼主2025/7/25 16:53
#include<stdio.h>
#include<algorithm>
using namespace std;
class lll{
	private:
		int a[(int)1e5+7],len=0,flag=1;
		const int N=1e4;
		int b[10]={1,10,100,1000,10000};
	public:
		void operator=(const lll &w) {
			flag=w.flag;
			len=w.len;
			for(int i=0;i<len;i++){
				a[i]=w.a[i];
			}
		}
		void scan(){
			char c;int f=0;
			while(1){
				scanf("%c",&c);
				if(c<'0'||c>'9'){
					break;
				}
				a[len]=a[len]*10+c-'0';
				f=3;
				scanf("%c",&c);
				if(c<'0'||c>'9'){
					break;
				}
				a[len]=a[len]*10+c-'0';
				f--;
				scanf("%c",&c);
				if(c<'0'||c>'9'){
					break;
				}
				a[len]=a[len]*10+c-'0';
				f--;
				scanf("%c",&c);
				if(c<'0'||c>'9'){
					break;
				}
				a[len]=a[len]*10+c-'0';
				len++;
				f=0;
			}
			if(f!=0){
				len++;
			}
			reverse(a,a+len);
			for(int i=0;i<len-1;i++){
				a[i]+=a[i+1]%b[f]*b[4-f];
				a[i+1]/=b[f];
			}
		}
		void print(){
			if(flag==0){
				printf("-");
			}
			printf("%d",a[len-1]);
			for(int i=len-2;i>=0;i--){
				printf("%4.4d",a[i]);
			}
		}
		bool operator==(const lll &w)const{
			if(flag!=w.flag){
				return false;
			}
			if(len!=w.len){
				return false;
			}
			for(int i=0;i<len;i++){
				if(a[i]!=w.a[i]){
					return false;
				}
			}
			return true;
		}
		bool operator<(const lll &w)const{
			if(flag<w.flag){
				return true;
			}
			if(flag>w.flag){
				return false;
			}
			if(len<w.len){
				return true;
			}
			if(len>w.len){
				return false;
			}
			for(int i=len-1;i>=0;i--){
				if(a[i]<w.a[i]){
					return true;
				}
				if(a[i]>w.a[i]){
					return false;
				}
			}
			return false;
		}
		lll operator+(const lll &w)const{
			lll l;
			int c=0;
			l.len=max(len,w.len);
			for(int i=0;i<l.len;i++){
				l.a[i]=(a[i]+w.a[i]+c)%N;
				c=(a[i]+w.a[i]+c)/N;
			}
			if(c){
				l.a[l.len]=c;
				l.len++;
			}
			return l;
		}
		lll operator-(const lll &w)const{
			lll l,d,b,t;
			int c=0;
			d.flag=flag;
			l.len=max(len,w.len);
			d.len=len;
			for(int i=0;i<len;i++){
				d.a[i]=a[i];
			}
			b=w;
			if(d<b){
				l.flag=0;
				t=b,b=d,d=t;
			}
			for(int i=0;i<l.len;i++){
				int sub=(i<d.len?d.a[i]:0)-(i<b.len?b.a[i]:0)-c;
				if(sub<0){
				sub+=N;
				c=1;
				}
				else{
					c=0;
				}
				l.a[i]=sub;
			}
			while(l.a[len]==0&&l.len!=0){
				l.len--;
			}
		    if(l.len==0){
				l.len++;
		    }
			return l;
		}
		lll operator*(const lll &w)const{
			int c;
			lll l;
			l.len=len+w.len-1;
			for(int i=0;i<len;i++){
				for(int j=0;j<w.len;j++){
					l.a[i+j]+=a[i]*w.a[j];
				}
			}
			for(int i=0;i<l.len;i++){
				l.a[i+1]+=l.a[i]/N;
				if(i+1>=l.len&&l.a[i]/N!=0){
					l.len++;
				}
				l.a[i]=l.a[i]%N;
			}
			while(l.a[l.len-1]==0&&l.len!=0){
				l.len--;
			}
			if(l.len==0){
				l.len++;
			}
			return l;
		}
};
int main(){
	lll a,b,c;
	a.scan();b.scan();
	c=(a*b);
	c.print();
	return 0;
}
2025/7/25 16:53
加载中...