我想创建一个程序来查找数字的阶乘,我也希望使用指针来实现它。
我试图制作一个程序,但它没有提供数字的阶乘。谁能解释我为什么?
#include<stdio.h>
#include<stdlib.h>
int fact(int* num, int* n)
{
for ((*n) = 1; (*n) <= (*num); (*n)++)
{
*n = (*n)*(*num);
}
}
int main()
{
int num, n;
printf("Write the number to take factorial \n");
scanf("%d", &num);
fact(&num, &n);
printf("Factorial = %d", n);
return 0;
}
答案 0 :(得分:2)
当您使用int函数时,它必须包含一些返回值。如果您进行以下更改,它将完美运行。
{
id: 123,
A: [“value A1”,“value A2”]
B: “value b”
},
{
id: 456,
A: ["a2 value"],
B: "b2 value"
}
答案 1 :(得分:1)
*n=(*n)*(*num);
正在更改for
循环中使用的计数变量的值!
虽然这在C语言中是完全合法的,但它会导致错误的答案。
尽管它具有非fact
返回类型,但您也不会从void
显式返回值。这是未定义的行为。
另请注意,int
的范围可以小到-32767到+32767,只允许7!或更低。请考虑使用long long
类型。
答案 2 :(得分:1)
如果我错了,请纠正我,但我认为你的尝试逻辑本身是不正确的:
for ((*n) = 1; (*n) <= (*num); (*n)++)
{
*n = (*n)*(*num);
}
您正在使用计数变量(在这种情况下为'* n')以存储结果。如果检查流程,循环将在第一次迭代后结束,然后递增它,给出值(* num + 1)。
对您的事实功能的一个很好的修改可能是:
void fact(int* num, int* n)
{
int counter;
*n=1;
for (counter = 2 ; counter <= (*num) ; counter++)
{
*n = (*n)*(counter);
}
}
如果您对结果使用引用调用,则无法看到将函数的返回类型保留为int的原因。
在回答'@nikhil biijjala'给出的答案时,我无法理解你在第一个位置传递指针(* n)的原因。所有指针都用作循环的本地计数器。
在大整数的情况下,您可以添加输入限制或使用long long。
答案 3 :(得分:0)
NotImplementedException()