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,各类型数据范围如下:
代码修改后运行结果:
代码:
#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个字节
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!