📄 cpp1.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 + -