如果您使用按值调用函数来使用传递的参数进行计算,那么要在调用者中获取计算结果,该函数必须返回一个值。那就是它的返回类型不应该是void
.
函数的定义fact
没有意义。在 for 循环中,参数i
被重新分配给1
. 循环本身从不迭代,因为另一个变量j
设置为0
. 所以它不能大于1
。
int j=0;
for(i=1; j>1; j--){
该函数可以通过以下方式定义
//factorial definition:
unsigned long long int fact( unsigned int i )
{
unsigned long long int f = 1;
while ( i > 1 ) f *= i--;
return f;
}
阶乘是为无符号自然整数定义的。
在 main 中,您需要声明一个 unsigned int 类型的变量,例如
unsigned int x;
这个呼唤scanf
scanf("%d", x);
是不正确的。该函数需要通过引用来接受其整数参数才能更改它。
scanf( "%u", &x );
要获得函数的结果,fact
您必须再引入一个变量
unsigned long long int result = fact( x );
并输出它你应该写
printf( "value of %u! = %llu\n", x, result );
这是一个演示程序。
#include <stdio.h>
unsigned long long int fact( unsigned int );
int main(void)
{
unsigned int x;
scanf( "%u", &x );
unsigned long long int result = fact( x );
printf( "value of %u! = %llu\n", x, result );
return 0;
}
//factorial definition:
unsigned long long int fact( unsigned int i )
{
unsigned long long int f = 1;
while ( i > 1 ) f *= i--;
return f;
}
如果输入数字,20
那么函数输出将是
value of 20! = 2432902008176640000
请注意,它20
的阶乘可以存储在 type 的对象中的最大数量unsigned long long int
。
如果您希望函数通过引用接受其参数并在参数中返回结果,那么您必须将变量声明x
为具有 unsigned long long int 类型。
这是一个演示程序。
#include <stdio.h>
void fact( unsigned long long int * );
int main(void)
{
unsigned long long int x;
scanf( "%llu", &x );
printf( "value of %llu! = ", x );
fact( &x );
printf( "%llu\n", x );
return 0;
}
//factorial definition:
void fact( unsigned long long int *x )
{
unsigned long long int f = 1;
while ( *x > 1 ) f *= ( *x )--;
*x = f;
}
如果进入20
则程序输出将如上所示。
value of 20! = 2432902008176640000