【问题标题】:Finding the Factorial of range between 1 to N查找 1 到 N 范围内的阶乘
【发布时间】:2020-09-02 13:38:02
【问题描述】:

试图编写一个程序来找到从 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;
}

【问题讨论】:

  • 旁白:我建议您使用unsigned long longuint64_t 以获得更有用的工作范围。 32 位 int 的限制是 12!在溢出之前。
  • @WeatherVane 和 uint64_t 的限制是 20!
  • 为什么给出的答案没有反馈?他们真的那么糟糕吗?

标签: c algorithm loops factorial


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的两个循环是多余的:您可以从 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2021-08-14
      相关资源
      最近更新 更多