查找介于1到N之间的阶乘

时间:2020-09-02 13:38:02

标签: c algorithm loops factorial

试图编写一个程序来查找从1到N的数字范围的阶乘,N是要查找其阶乘的最终数,我编写了一个非递归程序。它仅适用于整数1和2在循环中,我不确定如何解决它,因为逻辑看起来还不错,我还是一个初学者,所以我知道我可能缺少明显的东西,但是无论如何这是代码:< / p>

 #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;
}

2 个答案:

答案 0 :(得分:2)

您需要在每次计算之前初始化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);
}

答案 1 :(得分:1)

您的两个循环是多余的:您可以从number的阶乘计算number - 1的阶乘

这是只有一个循环的程序。复杂度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;
}
相关问题