📄 jiecheng.h
字号:
//阶乘类,可算到3000多位,修改*p的类型可以算出更多位的阶乘
class jiecheng{
public:
jiecheng(){n = 0;}
jiecheng(int a){n = a;if(a<0){n = 0;}}
void ShowResult(); //显示结果函数
private:
int n; //n的阶乘
};
void jiecheng::ShowResult(){
cout<<"The result of "<<n<<"! is"<<endl;
if(n==0) {cout<<"1"<<endl;}
else if(n>0&&n<13){//用unsigned long int类型保存结果
unsigned long int result = 1;
for(int i=1;i<n+1;i++) {result *= i;}
cout<<result<<endl;
}
else {//用指针保存
float pos=0;
for(int j=1;j<n+1;j++) {pos += log10(j); }
int *p;
p = new int[(int)(pos+1)];
int tmp2 = 0,tmp3;
int size = 1;//不断用来记录结果的位数
*p++ = 0;*p++ = 0;*p++ = 6;*p++ = 1;*p++ = 0;*p++ = 0;
*p++ = 9;*p++ = 7;*p = 4;size = 9;//先保存13!的结果,减少时间复杂度
for(int i=13;i<n+1;i++){
for(int j=size-1;j>=0;j--){
tmp3 = (tmp2+(*(p-j))*i)%10;
tmp2 = (tmp2+(*(p-j))*i)/10;
*(p-j) = tmp3;
}
while(tmp2!=0){
p++;size++;
*p = tmp2%10;
tmp2 = tmp2/10;
}
}
for(j=0;j<size;j++){
cout<<*(p-j);
}
p = p-size+1;
delete p;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -