100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 如何用c 语言编写阶乘程序 求10000的阶乘(c语言代码实现)

如何用c 语言编写阶乘程序 求10000的阶乘(c语言代码实现)

时间:2019-05-03 05:30:46

相关推荐

如何用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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。