注册 登录
编程论坛 C++教室

这是个求阶乘的程序,可是不知道哪里错了,哪个大神帮忙看一下。输出的结果总是不对

柚夏怪 发布于 2016-09-15 09:15, 2093 次点击
#include <iostream>
int f(int n)
{
    if(n < 0)
    {
        return -1;
    }
    if(n == 0)
    {
        return 0;
    }
    int re = 1;
    for(int i=1;i<=n;++i)
    {
        re=re*i;
    }
    return re;
}
int main()
{
    int n;
    std::cin>>n;
    std::cout<<f(n);
    return 0;
}
8 回复
#2
追寻XT2016-09-15 09:54
没有错啊?你发个运行截图看看??
#3
柚夏怪2016-09-15 10:02
回复 2楼 追寻XT
才发现发错代码了   这个大于二十的数就不可以了
#include <iostream>
#include<stdlib.h>
int f(int n)
{
    if(n < 0)
    {
        return -1;
    }
    if(n = 0)
    {
        return 0;
    }
    int re = 1;
    for(int i=1;i<=n;++i)
    {
        re=re*i;
    }
    return re;
}
int main()
{
    int size = 10;
    int *p = (int*)malloc(sizeof(int)*size);
    int n;
    std::cin>>n;
    for(int i=0; ;i++)
    {
        if(f(n)>=size)
        {
            int *q=(int*)malloc(sizeof(int)*2*size);
            size = 2*size;
            free(p);
            p=q;
        }
    }
    std::cout<<f(n);
    return 0;
}
#4
rjsp2016-09-15 19:20
回复 3楼 柚夏怪
你是不是认为int类型能表达任意大小的数值?
#5
追寻XT2016-09-15 20:06
一种一般换用别的数据类型。如long long等,与程序的健壮性有关。
#6
书生牛犊2016-09-15 21:44
我之前做过输出“1-50”的阶乘。使用int数组做的。现在代码搞丢了。

楼主应该对20个数的阶乘的那个数有多大有个概念从10乘到20,就算10个10相乘这都10位数了。20的阶乘可想而知。如果楼主打算测试更长的数据。
我认为这道题你应该用int数组去做,原理就和我们小学做竖式计算一样一位一位往上成,满十进一。
#7
yangfrancis2016-09-15 22:09
数据溢出。再加上n=0不同于n==0
#8
hfutwwh2016-10-12 22:24
#9
StadyC2016-10-14 10:33
首先你要知道,0的阶乘也是1。然后n = 0是把0赋值给n的意思,并不是判断n是否等于0

1