注册 登录
编程论坛 C语言论坛

入门的阶乘算法

世默枯 发布于 2022-05-27 22:12, 2066 次点击
程序代码:
int b,d;
    scanf("%d",&b);
    while(b>=1 && b<=9)
        {
             d=b;
        }
     while(d>=1)
        {
            b=b*d;
            d=d-1;
        }
    printf("%d",b);
    system("pause");
    return 0;

要求算1~9中任意数的阶乘,能运行,但是结果不正确.....这个要咋改啊
11 回复
#2
林月儿2022-05-27 22:40
程序代码:
int b,d;
    scanf("%d",&b);
    if(b>=1 && b<=9)
        {
             d=b;
        }
     while(d>=1)
        {
            b=b*d;
            d=d-1;
        }
    printf("%d",b);
    system("pause");
    return 0;
#3
追梦人zmrghy2022-05-28 14:39
程序代码:
#include <iostream>

long factorial(long num)
{
    if (num == 1)
        return 1;
    else
        return num * factorial(num - 1);
}
int main()
{
    int num;
    std::cin >> num;
    printf("%d的阶乘等于  %d\n",num, factorial(num));
}

只有本站会员才能查看附件,请 登录
#4
追梦人zmrghy2022-05-28 14:44
递归调用,就是专计算阶乘用的
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-5-28 14:51编辑过]

#5
世默枯2022-05-28 21:16
回复 4楼 追梦人zmrghy
C语言也可以直接用这个框架嘛,我刚开始自学,还不是很懂
#6
世默枯2022-05-28 21:26
回复 2楼 林月儿
能进行运算,但是应该还是算法有问题,只能算对1,其他的数字就不行了,算出来的结果是错的。但还是感谢回帖~
#7
追梦人zmrghy2022-05-29 00:50
回复 5楼 世默枯
这个C++,差不多。
就一个iostream 和cin
我按C标准改一下
程序代码:
#include <stdio.h>
long factorial(long num)
{
    if (num == 1)
        return 1;
    else
        return num * factorial(num - 1);
}
int main()
{
    int num = 0, innum = 0;
    printf("请输入需要计算阶乘最大数\n");
    scanf("%d", &innum);
    for(num=1; num<=innum; num++)
    printf("%2d的阶乘等于  %d\n",num, factorial(num));
}

只有本站会员才能查看附件,请 登录

#8
追梦人zmrghy2022-05-29 01:25
按照,你的思路,不使用递归调用
程序代码:
#include <stdio.h>
long factoral(int num)
{
    long x = 1;
    int y = 0;
    for (y = 1; y <= num; y++)
    {
        x = x * y;
    }
    return x;
}
int main()
{
    int num = 0, innum = 0;
    printf("请输入需要计算阶乘最大数\n");
    scanf("%d", &innum);
    for (num = 1; num <= innum; num++)
    {
        printf("%2d的阶乘等于  %d\n", num, factoral(num));
    }
    return 0;
}

只有本站会员才能查看附件,请 登录
#9
wp2319572022-05-30 09:43
回复 6楼 世默枯
程序代码:

#include <stdio.h>

int main()
{
    int b,d=1;
    scanf("%d",&b);
    while(b>=1)
    {
        d*=b;
        b--;
    }
    printf("%d",d);
    return 0;
}
#10
wp2319572022-05-30 09:51
回复 6楼 世默枯
这个问题,我更倾向于使用for 循环   简单明了

程序代码:

#include <stdio.h>

int main()
{
    int b,d=1;
    scanf("%d",&b);
    for(int i=1;i<=b;i++) d*=i;
    printf("%d",d);
    return 0;
}
#11
do8do8do82022-05-30 17:48
(把算法直接扔给计算机,是不太好的!!!要经过思考)
int b,d;       //声明 整型数 b,d并未赋初值
    scanf("%d",&b); //输入  整数b  (万一输入的不是有效数字呢)
    while(b>=1 && b<=9)   // while( 会产生死循环)
        {
             d=b;
        }
     while(d>=1)    //如果 d==2  那么b==2
        {
            b=b*d;  //有 b=2*2(正确的应该为b=2*1,如何解决,若把 d=d-1 放在前面,则 当d==1时  d==0,b=1*0=0 也不符合)
            d=d-1;  //其实 当 输入1时 也就是 scanf 得到1 ,这个可以不作运算,因为1的阶乘就是1
        }          //所以修改如下
    printf("%d",b);
    system("pause");
    return 0;

要求算1~9中任意数的阶乘,能运行,但是结果不正确.....这个要咋改啊

修改后如下(供参考)
int b,d;       //声明 整型数 b,d并未赋初值
    scanf("%d",&b); //
    if(b>1 && b<=9)   // ( 进行1---9的数据判断)
        {
             d=b;
       /* } *///去掉这个括号
     while(d>1)    //  大于1才进行连乘
        {
            d=d-1; //位置上调
            b=b*d;  //
        }   
        }// if 的结束括号 要移动到这里,因为范围内的数据才进行连乘     
    printf("%d",b);
    system("pause");
    return 0;

[此贴子已经被作者于2022-5-30 17:50编辑过]

#12
dogontree2022-06-16 12:22
阶乘不就是累积吗?经常用的模式就是for循环d=1;d=d*i;i<=b;
和积累求和类似,只不过求和是for循环d=0;d=d+i;i<=b;
一通百通
1