我不会写这个阶乘代码
I cant write this factorial codes
我对此有些疑问。我正在尝试学习 C 编程。请帮助我
#include<stdio.h>
int main()
{
int a, factorial;
printf("Please enter a value :" );
scanf("%d", &a);
for (int i = 1; i<=a; i++)
{
a = (a - 1)*a;
}
printf("%d", factorial);
return 0;
}
您正在修改输入 a
而不是 factorial
并且也是错误的(未定义的行为),因为您使用的是未初始化的 factorial
。您只需要使用您声明的 factorial
变量。
int factorial = 1;
...
for (int i = 1; i<=a; i++) {
factorial = i*factorial;
}
编辑:
此外,请注意 C 的 int
只能保存有限的值。因此,超过一定数量(大约在 13 之后!如果 sizeof(int) 是 4 个字节),您将导致 integer overflow。
您可能需要查看 GNU bugnum library 来处理大阶乘值。
您的 for 循环正在使用您的变量 'a' 而不是阶乘变量,我尝试这样的事情
factorial = 1;
for (int i = 1; i<=a; i++)
{
factorial *= i;
}
您必须将阶乘初始化为 1,然后 for 循环将继续乘以 'i',直到 'i' 大于 'a'。
好吧,在您的代码行 a = (a - 1)*a;
中,您实际上更改了输入以获取阶乘。它也会破坏你的循环。只要您的 i
小于 a
,您的 for 循环就会继续,假设您在第一次迭代后选择 a=3
,a
本身将变为 6
,因此 for 循环将继续,直到达到整数限制,您将得到溢出错误。
你应该做什么?
首先,您应该使用第二个变量来存储阶乘结果,您将其引入为 factorial
,@danielku97 所说的方式是编写阶乘的好方法,因为如果您将 0 表示为输入它也会给出正确的结果 1。所以一个好的代码是:
factorial = 1;
for (int i = 1; i<=a; i++)
{
factorial *= i;
}
但是假设你坚持减法,你刚刚尝试使用的方式,那么你需要像这样更改代码:
scanf("%d", &a);
if (a==1 || a==0){
printf("1");
return 0;
}
factorial = a;
for (int i = 1; i<a; i++)
{
factorial *= (a - i)*factorial;
}
您可以看到代码变得不必要地长了。包含一个 if 以更正 1
和 0
的结果。此外,您还需要确保 i
永远不会变得像 i =a
那样,因为在那种情况下 a-i
将等于零并使阶乘结果等于零。
我希望这些解释可以帮助你更快地学习 C 和算法。
我对此有些疑问。我正在尝试学习 C 编程。请帮助我
#include<stdio.h>
int main()
{
int a, factorial;
printf("Please enter a value :" );
scanf("%d", &a);
for (int i = 1; i<=a; i++)
{
a = (a - 1)*a;
}
printf("%d", factorial);
return 0;
}
您正在修改输入 a
而不是 factorial
并且也是错误的(未定义的行为),因为您使用的是未初始化的 factorial
。您只需要使用您声明的 factorial
变量。
int factorial = 1;
...
for (int i = 1; i<=a; i++) {
factorial = i*factorial;
}
编辑:
此外,请注意 C 的 int
只能保存有限的值。因此,超过一定数量(大约在 13 之后!如果 sizeof(int) 是 4 个字节),您将导致 integer overflow。
您可能需要查看 GNU bugnum library 来处理大阶乘值。
您的 for 循环正在使用您的变量 'a' 而不是阶乘变量,我尝试这样的事情
factorial = 1;
for (int i = 1; i<=a; i++)
{
factorial *= i;
}
您必须将阶乘初始化为 1,然后 for 循环将继续乘以 'i',直到 'i' 大于 'a'。
好吧,在您的代码行 a = (a - 1)*a;
中,您实际上更改了输入以获取阶乘。它也会破坏你的循环。只要您的 i
小于 a
,您的 for 循环就会继续,假设您在第一次迭代后选择 a=3
,a
本身将变为 6
,因此 for 循环将继续,直到达到整数限制,您将得到溢出错误。
你应该做什么?
首先,您应该使用第二个变量来存储阶乘结果,您将其引入为 factorial
,@danielku97 所说的方式是编写阶乘的好方法,因为如果您将 0 表示为输入它也会给出正确的结果 1。所以一个好的代码是:
factorial = 1;
for (int i = 1; i<=a; i++)
{
factorial *= i;
}
但是假设你坚持减法,你刚刚尝试使用的方式,那么你需要像这样更改代码:
scanf("%d", &a);
if (a==1 || a==0){
printf("1");
return 0;
}
factorial = a;
for (int i = 1; i<a; i++)
{
factorial *= (a - i)*factorial;
}
您可以看到代码变得不必要地长了。包含一个 if 以更正 1
和 0
的结果。此外,您还需要确保 i
永远不会变得像 i =a
那样,因为在那种情况下 a-i
将等于零并使阶乘结果等于零。
我希望这些解释可以帮助你更快地学习 C 和算法。