C语言解决n的阶乘问题

C语言解决n的阶乘问题,第1张

目录

一.输入n,输出n的阶乘

二.输入n,输出1!+2!+3!+~~~~+n!

法一(两个for循环):

法二(用一个for循环):


一.输入n,输出n的阶乘

n的阶乘就是1乘以2乘以3········一直乘到n,这样就很明显,我们可以用循环来做,那我们就以for循环举个例子:
 

#include
int main()
{
    int n=0;//
    scanf("%d",&n);//输入n,决定求哪个数的阶乘,以及为循环做准备
    int a=1;//定义一个变量,用来存储最后结果
    for (int i=1;i<=n;i++)//确定循环n次,形成1*2*···*n
    {
        a=a*i;
    }
    printf("%d的阶乘是:%d\n",n,a);
    return 0;
}

我们运行来看看:

 4!=4*3*2*1=24,所以结果正确,这里需要注意一下int类型的范围,一旦输入的n过大,就有可能会出错:

 如果需要求比较大的数的阶乘,可用long long类型,输出格式用‘lld’就行

二.输入n,输出1!+2!+3!+~~~~+n! 法一(两个for循环):

        这一题跟上一题相比,他把各个阶乘都加起来了,那么我们可以用两个for循环来解决这个问题:

#include
int main()
{
    int n=0;
    scanf("%d",&n);//输入n,确定会有n个数的阶乘相加

    int he=0;//定义一个变量存放最后相加的结果
    for (int i=1;i<=n;i++)//循环n次
    {
        int a=1;//a定义这里特别重要
        for (int j=1;j<=i;j++)//这一个循环跟求n的阶乘是一样的
        {
            a=a*j;
        }//这一个循环结束就求出了一个数(i)的阶乘
        he=he+a;//把上面循环求出来的阶乘存起来,并不断累加
    }
    printf("%d个数各个数的阶乘和是:%d\n",n,he);
    return 0;
}

两个for循环,第二个循环它的本质就是求一个数的阶乘,第一个循环就是把各个数的阶乘累加起来,我们运行来看看:

1!+2!+3!+4!=1+2+6+24=33,所以结果正确,这里再提一点,第10行代码我注释它的位置很重要,我们把a定义在第6行试试:

我们运行看看:

 1!+2!+3!=9,但结果却变成了15,我们来分析看看:直接看第二个循环,i=1时,我们会有a=1*1=1;继续,i=2;也就是第二个循环要2次,第一次:a=1*1=1,第二次:a=1*2=2;一直到这里看似都没问题,接下来就出现问题了,当i=3;也就是第二个循环要循环三次,第一次:a=2*1=2,第二次:a=2*2=4;第三次:a=4*3=12;所以最后输出结果就是1+2+12=15;第三次循环出现了问题,问题出在a不再是从1开始求阶乘,因为a一直没有清空,它一直保留着上一次循环a存的值,所以a必须放到第10行也就是第二个for循环的前面,这样每循环一次就会把a重新赋值为1,那么第二个循环求阶乘就不会出错

法二(用一个for循环):

这个题用两个for循环感觉有点复杂且需要注意的地方有点多,容易出错,那我们试着能不能用一个循环就解决它:
 

#include
int main()
{
    int n=0;
    scanf("%d",&n);//输入n,确定会有n个数的阶乘相加
    int a=1;
    int he=0;
    for(int i=1;i<=n;i++)//循环n次
    {
        a=a*i;
        he=he+a;
    }
    printf("%d个数各个数的阶乘和是:%d\n",n,he);
    return 0;
}

 结果是:

 这里的循环很有趣,来分析一下:第一次:i=1,a=1*1=1,he=0+1=1;第二次:i=2,a=1*2=2,he=1+2=3;第三次:i=3,a=2*3=6;he=3+6=9;第四次:i=4,a=6*4=24,he=9+24=33。之所以有趣是因为这个循环反而利用了a不清空这一特点,直接让a接着乘,这样也能算出正确答案。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2889317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存