我这个求阶乘的14出不了结果,别的能出,很迷茫

#include
int main()
{ int y=1;
int x;
int z=1;
scanf("%d",&x);
for(y=1;x>=y;y++){
z=z*y;
}
printf("%d",z);
}

10的阶乘就已经很大了,更别说14的阶乘int类型可承受不了

把z的类型改为long long

#include <stdio.h>

int main() {
  int y = 1;
  int x;
  long long z = 1;
  scanf("%d", &x);
  for (y = 1; x >= y; y++)
    z = z * y;
  printf("%lld\n", z);
  return 0;
}

改成long long试试?


#include<stdio.h>

int main()
{ 
    int y=1;
    int x;
    long long z=1;
    scanf("%d",&x);
    for(y=1; y <= x; y++)
    {
        z = z*y;
    }
    printf("%lld",z);
}

int的取值范围为:-2^31 ---- 2^31-1 ,即:-2147483648 ~ 2147483647
一旦最后结果超过了这个范围就会出现错误
有两种方法,一是将z的类型改为long long 类型,输出格式为“%lld”
二是将z的类型改为double类型,输出格式为“%lf”,不过这样结果保留六位小数


#include<stdio.h>
int main()
{
    int y=1;
    int x;
    long long z=1;
    scanf("%d",&x);
    for(y=1;x>=y;y++){
        z=z*y;
    }
printf("%lld",z);
}

或者

#include<stdio.h>
int main()
{
    int y=1;
    int x;
    double z=1;
    scanf("%d",&x);
    for(y=1;x>=y;y++){
        z=z*y;
    }
printf("%lf",z);
}

可以啊没有问题的,重新编译,再运行,结果1278945280