试图写一个程序,会发现从 1 到 N 的数字范围的阶乘,N 是找到阶乘的最终数字,我写了一个非递归程序。它只适用于整数 1 和 2 在循环中,我不知道如何解决它,因为逻辑似乎很好,我还是一个初学者,所以我知道我可能错过了一些明显的东西,但无论如何这里的代码:
#include<stdio.h>
int main() {
int firstnumber;
int finalnumber;
printf("this is a program to calculate the factorial of numbers between 1 to N\n");
printf("please enter the final number : ");
scanf("%d",&finalnumber);
int i;
int factorial=1;
for (firstnumber=1;firstnumber<=finalnumber;firstnumber++) {
printf("the factorial of %d is : ",firstnumber);
for (i=1;i<=firstnumber;i++) {
factorial=factorial*i;
}
printf("%d \n ",factorial);
}
return 0;
}
您需要在每次计算之前初始化factorial
。
int i;
// delete this
//int factorial=1;
for (firstnumber=1;firstnumber<=finalnumber;firstnumber++) {
printf("the factorial of %d is : ",firstnumber);
// move the declaration here
int factorial=1;
for (i=1;i<=firstnumber;i++) {
factorial=factorial*i;
}
printf("%d \n ",factorial);
}
您的两个循环是冗余的:您可以从number - 1
的阶乘计算number
的阶乘
这是只有一个循环的程序。复杂度 O(N)。
注意使用int
会很快溢出。
#include<stdio.h>
int main() {
int number;
int finalnumber;
printf("this is a program to calculate the factorial of numbers between 1 to N\n");
printf("please enter the final number : ");
scanf("%d",&finalnumber);
int factorial = 1;
for (number=1; number<=finalnumber; number++) {
printf("the factorial of %d is : ",number);
factorial *= number;
printf("%d \n",factorial);
}
return 0;
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(33条)