此代码有什么问题?我是CodeChef的新手,它说我的输出不正确

时间:2019-09-23 09:12:58

标签: c

我是CodeChef的新手,正在解决C lang中的入门部分。我为问题写了代码=>

要求您计算一些小的正整数的阶乘。

输入
整数t,1 <= t <= 100,表示测试用例的数量,后跟t行,每行包含一个整数n,1 <= n <= 100。

输出
对于输入中给定的每个整数n,显示一行n值!

我得到正确的输出,但是我的代码没有被接受。请帮忙。

#include <stdio.h>

void fact(int x) {
    int temp = 1;

    if(x<=1) {
        printf("%d\n", x);
    } else {
      for (int i=1; i<=x; i++) {
        temp *= i;
      }   
      printf("%d\n", temp);  
    }
}

int main(void) {
    int n;
    int t;

    scanf("%d", &t);

    if(t>=1 && t<=100) {
      while(t--) {
        scanf("%d", &n);
        if (n>=1 && n<=100) {
          fact(n);
        }
      }
    }

    return 0;
}
Sample input:
4
1
2
5
3

Sample output:
1
2
120
6

1 个答案:

答案 0 :(得分:0)

100!在9e157左右,因此不能用int(甚至64位)表示。它甚至不能用unsigned long long表示。

您必须使用double,但由于浮点类型不能表示所有整数,因此可能无法获得确切的值。

如果要获取确切的值,则必须实现自己的整数结构或使用整数数组并对其进行乘法。