求助
查看原帖
求助
322792
AlexandreLea楼主2020/10/8 22:09
/*
 *Program Bank:WZOI-2 NOIP-1998-J T2
 *Porbelm number:162
 *Added by Him2009
 */
#include <iostream>
#include <string>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
struct Integer {
	int Number[1001]; //Number of integer
	int Length; //Length of integer
	Integer() {
		Length=0;
		std::memset(Number,0,sizeof(Number));
	}
	Integer(int num) {
		Length=0;
		std::memset(Number,0,sizeof(Number));
		while(num){
			Number[Length]=num%10;
			num/=10;
			Length++;
		}
	}
	Integer operator=(int num) {
		Integer X;
		while(num) {
			X.Number[X.Length]=num%10;
			num/=10;
			X.Length++;
		}
		return X;
	}

};

void Read(Integer &X) {
	std::string Cur;
	cin>>Cur;
	X.Length=Cur.length();
	for(int i=0; i<X.Length; i++) {
		X.Number[i]=Cur[X.Length-i-1]-'0';
		//              ^^^^^^^^^^^^
		//              Reverse the cur.
	}
	return;
}

void Write(Integer X) {
	for(int i=X.Length-1; i>=0; i--) {
	}
	return;
}
Integer operator+(Integer A,Integer B) {
	Integer Answer,C; //Answer is answer,c is add carry.
	Answer.Length=std::max(A.Length,B.Length); //Long length.
	for(int i=0; i<Answer.Length; i++) {
		Answer.Number[i]=A.Number[i]+B.Number[i]+C.Number[i]; //A+B+carry
		if(Answer.Number[i]>9) { //Add carried
			C.Number[i+1]=A.Number[i]/10;
			A.Number[i]%=10;
		}
	}
	while(Answer.Number[Answer.Length]>0) Answer.Length++;
	return Answer;
}

Integer operator*(Integer A,Integer B) {
	Integer Answer;
	Answer.Length=A.Length+B.Length-1;
	for(int i=0; i<A.Length; i++) {
		for(int j=0; j<B.Length; j++) {
			Answer.Number[i+j]=A.Number[i]*B.Number[j];
		}
	}
	for(int i=0; i<Answer.Length; i++) {
		if(Answer.Number[i]>9) {
			Answer.Number[i+1]=Answer.Number[i]/10;
			Answer.Number[i]%=10;
		}
	}
	while(Answer.Number[Answer.Length]>0) Answer.Length++;
	return Answer;
}

bool operator<=(Integer A,Integer B) {
	if(A.Length<B.Length) return true;
	else if(A.Length>B.Length) return false;
	else {
		for(int i=std::max(A.Length,B.Length)-1; i>=0; i--) {
			if(A.Number[i]>B.Number[i]) return false;
			else if(A.Number[i]<B.Number[i]) return true;
		}
		return true;
	}
}
int main() {
	Integer n,ans;
	Read(n);
	for(Integer i=(int)1; i<=n; i=i+1) {
		Integer k=1,m=1;
		for(Integer j=(int)1; j<=i; j=j+1)
			k=k*j;
		ans=ans+k;
	}
	Write(ans);
	return 0;
}

求助,怎么搞得

2020/10/8 22:09
加载中...