阶乘,包括对零的处理,希望大神们帮我简化一下
#include<stdio.h>int jiechen(int num)
{
int result;
static int count=1;
if(count==1&&num!=0)
{
count++;
result=num*jiechen(num-1);
}
else if((count==1)&&(num==0))
{
result=0;
}
else
{
if(num>0)
{
result=num*jiechen(num-1);
}
else
{
result=1;
count=1;
}
}
return result;
}
int main()
{
int a,b;
while(1)
{
printf("请输入整数:\n");
scanf("%d",&a);
b= jiechen(a);
printf("结果为:%d\n",b);
}
return 0;
}
本帖最后由 jackz007 于 2019-8-31 10:26 编辑
这个代码简化的是否到位?
#include <stdio.h>
unsigned int jiechen(int num)
{
unsigned int result ;
int k ;
if(num > 0) for(result = 1 , k = 1 , k <= num ; k ++) result *= k ;
else result = 0 ;
return result ;
}
main(void)
{
int a ;
unsigned int b ;
while(1) {
printf("请输入整数:") ;
if(scanf("%d" , & a) == 1) {
b = jiechen(a) ;
printf("结果为:%u\n" , b) ;
} else {
break ;
}
}
}
如果规定必须采用递归算法,那就是下面的代码:
#include <stdio.h>
unsigned int jiechen(int num)
{
unsigned int result ;
result = 0 ;
if (num > 1) result = num * jiechen(num - 1) ;
else if(num == 1) result ++ ;
return result ;
}
main(void)
{
int a ;
unsigned int b ;
while(1) {
printf("请输入整数:") ;
if(scanf("%d" , & a) == 1) {
b = jiechen(a) ;
printf("结果为:%u\n" , b) ;
} else {
break ;
}
}
}
这个代码采用 32 位整型变量,只能计算 12 以内的阶乘,如果改用 64 位整型变量,则可以计算 20 以内的阶乘,如果超出,计算结果将是溢出后的错误数值:
#include <stdio.h>
unsigned long long jiechen(int num)
{
unsigned long longresult ;
result = 0 ;
if (num > 1) result = num * jiechen(num - 1);
else if(num == 1) result ++ ;
return result ;
}
main(void)
{
int a ;
unsigned long long b ;
while(1) {
printf("请输入整数:") ;
if(scanf("%d" , & a) == 1) {
b = jiechen(a) ;
printf("结果为:%I64u\n" , b) ; // 这一句有问题,试试写成这样:printf("结果为:%llu\n" , b) ;
} else {
break ;
}
}
}
上述代码采用 tdm-gcc 成功编译运行。 谢谢大哥,我看看,很OK 可以用 <math.h>里的 tgamma()函数,当输入n为整数时,返回 (n - 1)!
#include <math.h>
#include <stdio.h>
long long jiecheng(int n)
{
if(n >= 0)
return (long long)tgamma(n + 1);
}
int main()
{
test = jiecheng(3);
printf("%lld", test);
} \Gamma(s)=\int_{0}^{+\infty} x^{s-1} e^{-x} d x
页:
[1]