【问题标题】:What's wrong with this code? I am new to CodeChef and it is saying that my output is not correct这段代码有什么问题?我是 CodeChef 的新手,据说我的输出不正确
【发布时间】:2019-09-23 18:20:44
【问题描述】:

我是 CodeChef 的新手,我正在用 C 语言解决初学者部分。我为问题写了代码=>

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

输入
一个整数 t,1

输出
对于输入时给定的每个整数 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;
}
样本输入: 4 1 2 5 3 样本输出: 1 2 120 6

【问题讨论】:

  • 你试过100!吗?你知道结果应该是什么吗?
  • 我想知道这是一个初学者练习,因为它无法用标准数据类型解决。
  • 您最多只能达到 12 个!使用int 和 20!使用long long int
  • @Jabberwocky OP 任务中的条件是:1&lt;=n&lt;=100 所以值为 0!没关系-但是,作为剧透,0!是一个非零的正整数,小于 2。
  • @WeatherVane 这是一个很好的问题,因为 C 标准没有指定浮点类型属性。

标签: c


【解决方案1】:

100! 大约是 9e157,然后它不能用 int 表示(即使是 64 位)。它甚至不能用unsigned long long 表示。

您必须使用double,但您可能无法获得准确的值,因为浮点类型不能代表所有整数。

如果你想得到准确的值,你必须实现自己的整数结构或使用整数数组并在它们上实现乘法。

【讨论】:

  • 您不需要实现新的数据类型。问题并不那么难 - 一种解决方案是将单个数字数组乘以一个小整数并传播进位。
  • 是的,“整数类型”这个表达方式选错了
  • @WeatherVane:实现数字数组的乘法就是实现一种新的数据类型。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2014-04-11
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多