一万的阶乘c语言方法,求10000的阶乘(c语言代码实现)
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
/*
程序功能:計算一個正整數n的階乘,目前最大能運算10000的階乘,可秒殺。
程序意義:加強自己對于大數的處理。
說明:此程序對乘法和除法還未做任何優化,如果用上位運算的知識應該可以繼續優化。 */ #include #define N 10000//宏定義數組長度 int main()
{
int nResult[N] = {0};//必須用一個足夠大的數組來存儲計算結果來確保計算結果不會溢出
int nDigit = 1; //位數
int nTemp = 0;//階乘的任一元素與臨時結果的某位的乘積結果
int i = 0;
int j = 0;
int nCarry = 0;//進位
int nNum = 0;
printf("Please input n:");
scanf("%d", &nNum);
nResult[0] = 1;//先將結果初始化為1
for (i = 2; i <= nNum; i++)//開始階乘,階乘元素從2開始一次“登場”
{
//按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for (j = 1, nCarry = 0; j <= nDigit; j++)
{
nTemp = nResult[j - 1]*i + nCarry;//相應階乘中的一項與當前所得臨時結果的某位相乘且加上進位
nResult[j - 1] = nTemp % 100000;//更新臨時結果的位上信息
nCarry = nTemp / 100000;//看是否有進位
}
while (nCarry)//判斷當前臨時結果的最高位是否有進位
{
nResult[nDigit++] = nCarry % 100000;//新增一位
nCarry /= 100000;//看是否還能繼續進位
}
}
for (i = nDigit; i >= 1; i--)//顯示結果
{
printf("%d", nResult[i - 1]); if (0 == nResult[i - 1])
{
printf("0000");//因為每個數組元素存儲5位數字,每次輸出項為0時需補上缺少的4個零
}
}
printf("\r\n");
return 0;
}
總結
以上是生活随笔為你收集整理的一万的阶乘c语言方法,求10000的阶乘(c语言代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用c语言描述单链表的数据类型,数据结构—
- 下一篇: android 资源匹配,Android