首页 > 解决方案 > 使用用户定义函数在 c 中给出垃圾值的数字的阶乘

问题描述

我试图构建一个程序来使用用户定义的函数计算阶乘,但它给出了一个垃圾值这个程序是 c-cat 准备的分配

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int accept_num();             // Function call
int fact();                   // Function call
void display_num();           // Function call
int main()
{
    int num;

    num = fact();        //calling factorial

    display_num(num);    //calling printf

}
    //take input
    int accept_num()
{
     int n;
     printf("Enter number: ");
     scanf("%d",&n);
     return n;
 }
    //calculate factorial
 int fact()
{
    int i,num1;
    unsigned long long factr=1;

    num1 = accept_num();

    for(i=1; i<=num1; i++)
    {
        factr *= i;
    }
    return factr;
}

void display_num(int num2)
{
    printf("Answer = %llu",num2);
}

标签: cfunctiondynamic-programmingfactorial

解决方案


不匹配的类型通常会导致垃圾值。计算阶乘后,您将其存储为int类型,并在display_num()您正在打印的函数中unsigned long long int保留比int. 此外,如果你使用int i它会导致在限制后循环迭代后的阶乘错误值int

下面是精炼的代码,将每个替换intunsigned long long int

#include<stdio.h>
#include<stdlib.h>
unsigned long long int accept_num();             // Function call
unsigned long long int fact();                   // Function call
void display_num();           // Function call
int main()
{
    //changed the datatype of num
    unsigned long long int num;

    num = fact();        //calling factorial

    display_num(num);    //calling printf

}
    //take input
   unsigned long long int accept_num()
{
    //changed datatype of n
     unsigned long long int n;
     printf("Enter number: ");
     scanf("%llu",&n);
     return n;
 }
    //calculate factorial
 unsigned long long int fact()
{
    unsigned long long int i;

    //changed datatype of num1
    unsigned long long int num1;
    unsigned long long int factr=1;

    num1 = accept_num();

    for(i=1; i<=num1; i++)
    {
        factr *= i;
    }
    return factr;
}

//changed datatype of argument num2
void display_num(unsigned long long int num2)
{
    printf("Answer = %llu",num2);
}

此外,还有更多可以减少的冗余变量。参考这段代码:

#include<stdio.h>
long int multiplyNumbers(int n);

int main() {
    int inputNumber;
    printf("Enter a positive integer: ");
    scanf("%d",&inputNumber);
    printf("Factorial of %d = %ld", inputNumber, multiplyNumbers(inputNumber));
    return 0;
}

//calculate factorial using recursion
long int multiplyNumbers(int n) {
    if (n>=1)
        return n*multiplyNumbers(n-1);
    else
        return 1;
}

推荐阅读