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

📄 cpp1.cpp

📁 求一个较大数的阶乘!例如100!将超过long的表示范围
💻 CPP
字号:
#pragma hdrstop 
#include<iostream.h> 
#include<iomanip.h> 
#include<conio.h> 
#define WAN 10000 //以10000为进制,进制越大,速度越快但同时算的数也越小; 
#define ENDFLAG 999999 //结束标志 
typedef unsigned int INTT ; 

//--------------------------------------------------------------------------- 
int main(int argc, char* argv[]) 
{ 
 cout<<"求任意正整数的阶乘"; 

do 
 { 
 cout<<endl<<"请输入一正整数:"; 
 int num; 
 cin>>num; 
 int modulus=2; //内存分配系数,此处有待求精 
 if (num>=20000)modulus=4; 
 INTT *array=new INTT[num*modulus+3]; //动态分配存放结果的数组 
  
 int endbit=0; //记录数组的最高有效位位 
 array[0]=1; 
 array[1]=ENDFLAG; 

 for(;num>=1;num--) 
 { 
 INTT buff=0,carry=0; 
 int i=0; 

 do{ 
 buff=array[i]*num+carry; 
 carry=buff/WAN; 
 array[i]=buff%WAN; 
 i++; 

 if (carry&&array[i]==ENDFLAG) //当I位已是最高有效位而且又I-1位的进位 
 { 
 array[i+1]=ENDFLAG; //将I+1位初始化为ENDFLAG 
 array[i]=0; //将I位初始化为0; 
 endbit=i; //将I赋值给最高有效位变量ENDBIT; 
 } 
 }while(carry||array[i]!=ENDFLAG); //当进位为0,或者已经到达结束标志 
 }//ENDFOR 



 cout<<array[endbit]; //输出最高位 

 for(--endbit;endbit>=0;endbit--) //依次输出其他位,高位不足四位补0 
 cout<<setfill('0')<<setw(4)<<array[endbit];//如果更改了进制SETW()里的数值也要跟着改,进制多少个0这里就多少位 

 delete [] array; 
 cout<<endl<<"按ESC键退出,任意键继续"; 

}while(getch()!=27); 
return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -