⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiecheng.h

📁 一个简单的计算N!程序
💻 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 + -