//N的阶乘--由于之后乘出来的数据很大,所以还是要用到高精度整数运算

//高精度整数乘法

//那么问题来了,如何实现大数与小数的乘法呢?

//是直接相乘,还是像手算一样乘呢?

#include

struct bigInteger{

int digit[1000];

int size;

void init(){

for(int i=0;i<1000;i++)digit[i]=0;

size=0;

}

void set(){

init();

size=1;

digit[0]=1;

}

void output(){

for(int i=size-1;i>=0;i--){

if(i==(size-1))printf("%d",digit[i]);

else printf("%04d",digit[i]);

}

printf("\n");

}

bigInteger operator*(const int& x)const{

bigInteger ret;

ret.init();

int carry=0;

printf("1size :%d\n",size);

for(int i=0;i

int temp=x*digit[i]+carry;

ret.digit[ret.size]=temp%10000;

carry=temp/10000;

(ret.size)++;

printf("2size :%d\n",size);

}

if(carry!=0){

ret.digit[(ret.size)++]=carry;

}

printf("3size :%d\n",size);

return ret;

}

bigInteger minusBigIn(const bigInteger &A,const int x)const{

bigInteger ret;

ret.init();

int carry=0;

//printf("1size :%d\n",A.size);

for(int i=0;i

int temp=x*digit[i]+carry;

ret.digit[ret.size]=temp%10000;

carry=temp/10000;

(ret.size)++;

//printf("2size :%d\n",A.size);

}

if(carry!=0){

ret.digit[(ret.size)++]=carry;

}

//printf("3size :%d\n",A.size);

return ret;

}

};

struct bigInteger a;

int main(){

int n;

while(scanf("%d",&n)!=EOF){

a.set();

for(int i=1;i<=n;i++){

//a=a*i;

a=a.minusBigIn(a,i);

}

a.output();

//printf("\n a.size : %d\n",a.size);

}

return 0;

}

都是板子题。记得init() 里面循环置零,size置零。 set()里面按照题意设置高精度整数的值。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐