n阶乘的c语言代码,求10000的阶乘(c语言代码实现)
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
/*
程序功能:計(jì)算一個(gè)正整數(shù)n的階乘,目前最大能運(yùn)算10000的階乘,可秒殺。
程序意義:加強(qiáng)自己對于大數(shù)的處理。
說明:此程序?qū)Τ朔ê统ㄟ€未做任何優(yōu)化,如果用上位運(yùn)算的知識應(yīng)該可以繼續(xù)優(yōu)化。 */ #include #define N 10000//宏定義數(shù)組長度 int main()
{
int nResult[N] = {0};//必須用一個(gè)足夠大的數(shù)組來存儲計(jì)算結(jié)果來確保計(jì)算結(jié)果不會溢出
int nDigit = 1; //位數(shù)
int nTemp = 0;//階乘的任一元素與臨時(shí)結(jié)果的某位的乘積結(jié)果
int i = 0;
int j = 0;
int nCarry = 0;//進(jìn)位
int nNum = 0;
printf("Please input n:");
scanf("%d", &nNum);
nResult[0] = 1;//先將結(jié)果初始化為1
for (i = 2; i <= nNum; i++)//開始階乘,階乘元素從2開始一次“登場”
{
//按最基本的乘法運(yùn)算思想來考慮,將臨時(shí)結(jié)果的每位與階乘元素相乘
for (j = 1, nCarry = 0; j <= nDigit; j++)
{
nTemp = nResult[j - 1]*i + nCarry;//相應(yīng)階乘中的一項(xiàng)與當(dāng)前所得臨時(shí)結(jié)果的某位相乘且加上進(jìn)位
nResult[j - 1] = nTemp % 100000;//更新臨時(shí)結(jié)果的位上信息
nCarry = nTemp / 100000;//看是否有進(jìn)位
}
while (nCarry)//判斷當(dāng)前臨時(shí)結(jié)果的最高位是否有進(jìn)位
{
nResult[nDigit++] = nCarry % 100000;//新增一位
nCarry /= 100000;//看是否還能繼續(xù)進(jìn)位
}
}
for (i = nDigit; i >= 1; i--)//顯示結(jié)果
{
printf("%d", nResult[i - 1]); if (0 == nResult[i - 1])
{
printf("0000");//因?yàn)槊總€(gè)數(shù)組元素存儲5位數(shù)字,每次輸出項(xiàng)為0時(shí)需補(bǔ)上缺少的4個(gè)零
}
}
printf("\r\n");
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的n阶乘的c语言代码,求10000的阶乘(c语言代码实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言中自守数函数,【C语言训练】自守数
- 下一篇: c语言switch循环语序,C语言初学者