请解决阶乘递归调用计算问题

1)请问我这个程序从13!开始,就不对了,前面“1!、2!……12!”都对的。
2)请问如何将公式也输出,例如输出“9!=987654321=362800”,我目前只会输出“9!=362800”。

9.函数的递归调用计算阶乘。
#include
long int factorial (int);

int main()
{int n;
scanf("%d",&n);
printf("%d!=%d",n,factorial(n));
}

long int factorial(int x)
{ long int a;
if(x==1){a=1;}
else{
a=x* factorial(x-1);
}

}

13的阶乘超过了int的取值范围,改为long long 吧。如果这个值会超过25,那要改用double
修改如下:

#include<stdio.h>
long long factorial (int);

int main()
{
    int n;
    scanf("%d",&n);
    printf("%d!=%d",n,n);
    long long a = factorial(n);
    printf("=%lld",a);
    system("pause");
}

long long factorial(int x)
{ 
    if(x==1)
        return 1;
    printf("*%d",x-1);
    return x* factorial(x-1);
}

(1)你的阶乘函数返回值是long int,那么你再printf中显示的时候,不应该用%d,应该用%ld,否则输出的时候会可能超出int类型范围导致显示结果出错。
(2)建议将阶乘函数的返回值改为long long,long long 类型的显示用%lld , long int 等价于long,各类型数据范围如下:

img

代码修改后运行结果:

img

代码:

#include<stdio.h>
long long factorial(int);

int main()
{
    int n;
    scanf("%d", &n);
    printf("%d!=", n);
    printf("%lld",  factorial(n));
}

long long factorial(int x)
{
    long long a;
    if (x == 1) { a = 1; printf("1="); }
    else {
        printf("%d*", x);
        a = x * factorial(x - 1);
    }
    return a;
}

你用了long int,那么输出应该写%ld,否则只会输出低4个字节,而不是完整的8个字节

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