c语言如何求N的阶乘

#include <stdio.h>
int main()
{
int n = 1;
scanf("%d",&n);
int a[20000];
int carry;
int i;
int digit = 1;
a[0] = 1;
int temp;
for(i = 2; i <= n; ++i)
{
carry = 0;
for(int j = 1; j <= digit; ++j)
{
temp = a[j-1] * i + carry;
a[j-1] = temp % 10;
carry = temp / 10;
}
while(carry)
{
a[++digit-1] = carry % 10;
carry /= 10;
}
}
for(i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
printf("\n");
n++;
return 0;
}
求大神讲解这道程序是如何实现求阶乘的功能的,详细点,谢谢

法/步骤

第一步、编程的第一步就是写头文件,对于初学者来说,只写一个头文件就可以了,即#include<stdio.h>

第二步、就是定义我们的变量,我们需要定义一个n,用来求他的阶乘,sum用来保存结果,i用来循环

第三步、就是把sum初始化,为1.千万不要为0,保证后面的结果不出问题。

第四步、就是输入一个n,用来求n的阶乘,别忘了在前面提示一下。

第五步、就是利用for循环来求阶乘。

第六步、就是调用printf(:);函数来输出阶乘结果。

拓展资料

定义

n!=1×2×3...xn

n!=X×(X-1)×(X-2)...×1

1751年,欧拉以大写字母M表示m阶乘 M=1x2x3...x...m

1799年,鲁非尼在他出版的方程论著述中,则以小写字母π表示m阶乘。而在1813年,高斯则以Π(n)来表示n阶乘。而用来表示n阶乘的方法起源于英国,但仍未能确定始创人是谁。直至1827年,由于雅莱特的建议而得到流行,现在有时也会以这个符号作为阶乘符号。

当n较大时,直接计算n!变得不可能,这时可通过斯特灵(Stirling)公式计算近似算或取得大小范围。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16

这题用到的是大数乘法知识,是模拟两个数相乘的计算方法,数值反向保存在数组a中。简单注释了一下,不懂再问。

#include <stdio.h>
int main()
{
    int n = 1;
    scanf("%d",&n);
    int a[20000];
    int carry; //进位
    int i;
    int digit = 1;//位数
    a[0] = 1;//值
    int temp;
    for(i = 2; i <= n; ++i)
    {
        carry = 0;//进位初始化为0
        for(int j = 1; j <= digit; ++j)
        {
            temp = a[j-1] * i + carry;//每一位乘以i+进位,得到当前位置的值
            a[j-1] = temp % 10;//当前位置的具体值
            carry = temp / 10;//进位
        }
        while(carry)//进位很多时,都保存在数组中。
        {
            a[++digit-1] = carry % 10;
            carry /= 10;
        }
    }
    for(i = digit; i >=1; --i)//输出
    {
        printf("%d",a[i-1]);
    }
    printf("\n");
    n++;
    return 0;
}

追问

麻烦把中间循环详细讲解下,就这看不懂,特别为什么是++i啊

本回答被提问者和网友采纳
第2个回答  2017-12-18
垃圾程序,语句错误一大堆,试数都是错的,程序不可能运行
相似回答