/*
*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;
}
求助,怎么搞得