重载运算符出了点问题,求助求助求助
查看原帖
重载运算符出了点问题,求助求助求助
330026
wmq2006楼主2020/8/6 08:48
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>

using namespace std;
struct big{
	int g[301];
};
int kk,w;
big s[30011],f[30011],cnt;
big operator +=(big a,big b){
	for(int i=1;i<=201;i++){
		a.g[i]+=b.g[i];
	}
	cout<<endl;
	for(int i=1;i<=201;i++){
		a.g[i+1]+=a.g[i]/10;
		a.g[i]%=10;
	}
	return a;
}
big operator -(big a,big b){
	for(int i=1;i<=201;i++){
		a.g[i]=b.g[i];
	}
	return a;
	//cout<<a.g[1]<<" "<<b.g[1]<<endl;
}
big operator ==(big a,int b){
	for(int i=1;i<=200;i++)a.g[i]=b;
	return a;
}
int main(){
	//freopen("brackets.in","r",stdin);
	//freopen("brackets.out","w",stdout);
	cin>>kk>>w;
	int p=w/kk+bool(w%kk);
	if(w%kk==0){
		for(int i=1;i<(1<<kk);i++)s[i]==1;
		for(int i=2;i<=p;i++){
			for(int j=1;j<(1<<kk);j++){
				for(int k=j+1;k<(1<<kk);k++){
					f[j]+=s[k];
					//cout<<f[j].g[1]<<" ";
				}
				//cout<<endl;
				cnt+=f[j];
			}
			for(int j=1;j<(1<<kk);j++){
				s[j]-f[j],f[j]==0;
			}
		}
		for(int i=1;i<=2;i++)cout<<cnt.g[i];//
	}
	else{
		p-=1;
		for(int i=1;i<(1<<kk);i++)s[i]==1;
		//for(int i=1;i<(1<<kk);i++)cout<<s[i].g[1]<<" ";
		//cout<<endl;
		for(int i=2;i<=p;i++){
			for(int j=1;j<(1<<kk);j++){
				for(int k=j+1;k<(1<<kk);k++){
					f[j]+=s[k];
				}
				cnt+=f[j];
			}
			for(int j=1;j<(1<<kk);j++){
				s[j]-f[j],f[j]==0;
			}
		}
		int q=w-(w/kk*kk);
		for(int i=1;i<(1<<q);i++){
			for(int j=i+1;j<(1<<kk);j++){
				f[i]+=s[j];
			}
			cnt+=f[i];
		}
		for(int i=1;i<=2;i++)cout<<cnt.g[i];//
	}
	return 0;
}

递推部分没问题,重载运算符不知为什么就不对了,求助各位,帮着看看!!

2020/8/6 08:48
加载中...