C语言递归n!,解决13!计算错误


#include<stdio.h>
int main()
{
    int fac(int n);
    int n;
    int y;
    printf("input an integer number:");
    scanf("%d",&n);
    y=fac(n);
    printf("%d!=%d\n",n,y);
    return 0;
}

int fac(int n)
{
    int f;
    if(n<0)
      printf("n<0,data error!");
    else if(n==0||n==1)
      f=1;
    else f=fac(n-1)*n;
    return(f);
}

计算结果不是预期结果。

img

img

如何将f,y和fac函数定义为float或double型?
谢谢友友的答疑~(^з^)-♡

改成long long就可以了


#include<stdio.h>
int main()
{
    long long fac(long long n);
    long long n;
    long long y;
    printf("input an integer number:");
    scanf("%lld", &n);
    y = fac(n);
    printf("%lld!=%lld\n", n, y);
    return 0;
}

long long fac(long long n)
{
    long long f;
    if (n < 0)
        printf("n<0,data error!");
    else if (n == 0 || n == 1)
        f = 1;
    else f = fac(n - 1) * n;
    return(f);
}