c语言oj题目阶乘,题目1076:N的阶乘 九度OJ
//N的阶乘--由于之后乘出来的数据很大,所以还是要用到高精度整数运算//高精度整数乘法//那么问题来了,如何实现大数与小数的乘法呢?//是直接相乘,还是像手算一样乘呢?#include struct bigInteger{int digit[1000];int size;void init(){for(int i=0;i<1000;i++)digit[i]=0;size=0;}void s
//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()里面按照题意设置高精度整数的值。
更多推荐
所有评论(0)