?? 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 + -