我的逻辑已输入num
存储到temp
变量中,并使用temp = temp * (num - i)
内的while
查找因子,直到num
大于0
且最初i = 1
,但我遇到问题,我的循环进入无限循环如何解决这个问题?
#include <stdio.h>
int main() {
int num, temp, i;
printf("Enter a Num who's factorial is need to be find : ");
scanf("%d", &num);
printf("num = %d\n", num);
temp = num;
printf("temp = %d\n", temp);
i = 1;
while (num > 0) {
temp = temp * (num - i);
i++;
printf(" i = %d\n ", i);
}
printf("fact = %d \n ", temp);
return 0;
}
答案 0 :(得分:2)
您正在检查num > 0
,但永远不会更新num inside
循环的值
更新它以检查num - i > 0
或num > i
while(num - i > 0)
{
temp = temp * (num-i);
i++;
printf(" i = %d\n ",i);
}
答案 1 :(得分:1)
while(num > 0)
{
num
永远不会在循环内更新,因此num
始终为> 0
。您想要的是
while((num-i) > 0)
i
会在循环的每次运行中更新,因此最终num-i
将变为0
并且循环将终止。
答案 2 :(得分:0)
while(num>0)
未更新。因此,您可以使用while((num-i)>0)
进行更新循环。请尝试以下C代码。
#include <stdio.h>
int main(){
int num,temp,i;
printf("Enter a Num who's factorial is need to be find : ");
scanf("%d",&num);
printf("num = %d\n",num);
temp = num;
printf("temp = %d\n",temp);
i=1;
while((num - i) > 0){
temp = temp * (num-i);
i++;
printf(" i = %d\n ",i);
}
printf("fact = %d \n ",temp);
return 0;
}
答案 3 :(得分:0)
您不需要额外的变量i
。重要的是你应该注意程序的时间和空间复杂性。
#include <stdio.h>
int main()
{
int num,temp;
printf("Enter a Num who's factorial is need to be find : ");
scanf("%d",&num);
printf("num = %d\n",num);
temp = 1;
while(num > 0)
{
printf(" num= %d\n ",num);
temp = temp * num;
num--;
}
printf("fact = %d \n ",temp);
return 0;
}
答案 4 :(得分:0)
你永远不会在num
循环体内更新while (num > 0)
,因此是无限循环。
您应该使用更简单的方法:一个经典的for
循环,其索引i
从1
增加到n
。这样您就不会修改num
的值,并可以将其用于最终输出:
#include <stdio.h>
int main(void) {
int num, res, i;
printf("Enter a number whose factorial to compute: ");
if (scanf("%d", &num) == 1) {
res = 1;
for (i = 1; i <= num; i++) {
res = res * i;
}
printf("%d! = %d\n", num, res);
}
return 0;
}
注意:
i
的初始值可以更改为2
。0
到12
的数字。将res
的类型更改为unsigned long long
最多可处理20
。