利用小于号重载写max却出错求大佬指出问题
查看原帖
利用小于号重载写max却出错求大佬指出问题
250013
keep_楼主2020/7/11 22:36
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100;
//long long a[maxn][maxn];
//long long f[maxn][maxn][maxn];
int n,m;
int mod=10000;//高精度四位压缩最大值; 
struct hp{
	int len,p[maxn];
	hp(){
		len=0;
		memset(p,0,sizeof(p));
	}
	void output(){//高精度四位压缩输出 
		cout<<p[len];
		for(int i=len-1;i>0;i--){
			if(p[i]==0){
				cout<<"0000";//输出前导0; 
				continue;
			}
			for(int k=10;k*p[i]<mod;k*=10){
				cout<<'0';	//输出前导0; 
			}
			cout<<p[i];
		}
	}
}f[maxn][maxn],ans;
bool operator <(const hp a,const hp b){//小于号重载; 
	if(a.len<a.len){
		return 1;
	}
	else if(a.len>b.len) return 0;
	for(int i=a.len;i>0;i--){
		if(a.p[i]<b.p[i])
			return 1;
		else if(a.p[i]>b.p[i])
			return 0;
	}
	return 1;
}
hp operator +(const hp a,int b){
	hp c;
	c=a;
	long long k=b;
	
	for(int i=1;i<=c.len+1;i++){
		c.p[i]=k+c.p[i];
		k=c.p[i]/10000;
		c.p[i]%=10000;	
	}
	if(c.p[c.len+1])
		c.len=c.len+1;
	return c;
}

hp operator +(const hp &a,const hp &b){//高精度加法的运算符重载 
	hp c;
	int len3=max(a.len,b.len);
	c.len=len3;
	for(int i=1;i<=len3;i++){
		c.p[i]=c.p[i]+a.p[i]+b.p[i];
		c.p[i+1]=c.p[i]/10000;
		c.p[i]=c.p[i]%10000;
	}
	if(c.p[len3+1])
		c.len=len3+1;
	return c;
}
/*
hp operator -(const hp a,const hp b){//高精度减法;
	int k=0; 
	if(a<b){
		k=1;
	hp g;
	g=a;
	a=b;
	b=g;
	}
	hp c;
	len3=b.len; 
	for(int i=1;i<=len3;i++){
		c[i]=c[i]+a[i]-b[i];
	}
}
*/
hp operator *(const hp &a,const int &b){
	hp c;
	int len3=a.len;
	c.len=len3;
	for(int i=1;i<=len3;i++){
		c.p[i]=a.p[i]*b+c.p[i];
		c.p[i+1]=c.p[i]/10000;
		c.p[i]=c.p[i]%10000;
	}
	if(c.p[len3+1])
		c.len=len3+1;
	return c;
}
hp max1(const hp &a,const hp &b){
	if(a<b){
		return b;
	}
	else 
		return a;
}
int main(){
	freopen("a.in","r",stdin);
	cin>>n>>m;
	long long a[1000];
	for(int h=1;h<=n;h++){
		memset(f,0,sizeof(f));
		//cout<<f[1][1].p[1];
		memset(a,0,sizeof(a));
	for(int g=1;g<=m;g++){
		cin>>a[g];
	}
	for(int l=1;l<=m;l++){
		for(int i=1;i+l-1<=m;i++){
			int j=i+l-1;
			f[i][j]=max1(f[i+1][j]*2+2*a[i],f[i][j-1]*2+2*a[j]); 
		}
	}
	ans=ans+f[1][m];
	}
	ans.output();
}

利用小于号重载写的max为什么会出错呢? 求指出;

2020/7/11 22:36
加载中...