请问下如何用减法和for循环实现n的阶乘呢?还有我下面图片中的错误之处主要在哪里呢?

各位好,我是学习C语言的入门人士,刚刚开始自学两周左右,目前主要是跟着B站学习C语言。
如图中所示,目前刚学for/while/do while的循环,主要问题有三点:1、主要任务是用减法和for循环实现n!,即n的阶乘的计算;2、指出程序的错误之处;3、如何修改错误之处使程序运行正常
人海中相遇即是缘分,也许你的一次友善的指导就可以为社会的和谐,国家的发展做出重要贡献,更是人格魅力的升华。希望有缘的您能够帮个忙指导下,不胜感激!

img

int sum = n*N; 不对
应该是sum = sum*n;
循环中不要用int 重新声明
另外你sumint类型,数值的范围是:-2147483648 to 2147483647
sum不断的相乘,当超过2147483647值就范围溢出变成负数,程序就会出错
sum应该改为double型,就没问题了。

你题目的解答代码如下:

#include<stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);
    double sum = 1;

    for(; n>0;n--)
    {
        sum = sum*n; //不要用int 重新声明

    }
    printf("%.0lf", sum);
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

for循环中不需要在声明sum了,否则,每次循环sum都等于n*N,(其实n和N是相等的,所以你的代码计算结果最后是1);
printf在for循环外面输出就可以了,否则每次for循环都会输出一句话。
另外,sum最好用doubl类型,避免溢出。
代码修改如下:

#include<stdio.h>

int main(void)
{
    int n;
    scanf("%d",&n);
    double sum=1;
    for (;n>0;n--)
    {
        sum *= n;
    }
    printf("%.0lf\n",sum);

    return 0;
}

这个代码一看就可以知道错误在那里,如果输入的是5,5!=120,这个代码中N=--n,这时N=4,n=4,到运行for循环的时候,sum=nN;相当与sum=44,第二次运行for循环的时候sum=33,因为在for循环中n--,N--,第三次运行for循环的时候sum=22……然后每次计算出sum时都会输出,第一次计算出的结果是16,第二次是9,第三次是4,第四次是1,输出出来就是16941
下面是代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    long long int sum = 1;
 
    for(; n>0;n--)
    {
        sum = sum*n; 
 
    }
    printf("%d", sum);
    return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632