【问题标题】:Issue regarding assignment for C关于 C 分配的问题
【发布时间】:2014-07-24 04:32:38
【问题描述】:

我目前在编程课程作业的介绍中遇到了一个问题。我必须编写一个计算数字阶乘的函数。我知道该怎么做,如下所示。然而,作业要求:

通过从 main 调用它来测试你的功能。循环调用函数,输出结果如下:

Factorials:
1: 1
2: 2
3: 6
4: 24
5: 120
… etc.

当数字太大而无法放入您的变量时,该函数将停止工作。您应该使用哪种数据类型来计算最多的阶乘?

我完全迷失了。我想知道是否有人可以指导我该怎么做?我在下面粘贴了我的代码:

#include <stdio.h>

int main(void){
    int number;

    printf("Enter an integer: ");
    scanf("%i", &number);

    factorial(number);

    return 0;
}


int factorial(int number){
    int fac = 1, count;

    count = number;
    while(count > 1){
        fac = fac * count;
        count = count - 1;
    }

    printf("The factorial: %i\n", fac );

}

【问题讨论】:

  • 对于非常大的数字没有内置数据类型。您需要自己编写程序,而不是使用 gmp 等第三方库。
  • 您的任务是向main() 函数添加一个循环,并更改输出格式。您已经在其他函数中有一个循环,因此您知道如何编写循环。您已经有几个printf 语句,所以您知道如何显示输出。具体来说,您遇到的问题是什么?
  • “我完全迷失了。” - 这是什么”?你写了“通过从主函数调用它来测试你的函数。在循环中调用函数,输出这样的结果......当数字太大而无法容纳你的变量时,该函数将停止工作。应该使用什么数据类型你用来计算最多的阶乘?” -- 你还没有告诉我们你迷失在哪一部分。
  • 试一试。你甚至没有尝试过。在 SO,我们希望人们在提出问题之前先尝试解决问题。如果您编写了该阶乘函数,那么您已经知道如何去做。是你写的,还是从别人那里抄来的,没看懂?
  • 您尚未发布任何代码表明您已尝试过。祝你好运......我在这里完成了。

标签: c function


【解决方案1】:

您应该使用uintmax_t。它在stdint.h中定义。

它是一个无符号整数类型,具有平台支持的最大宽度。

【讨论】:

    【解决方案2】:

    您可以使用unsigned long long 输入更大的数字,但仅限于某些限制。

    【讨论】:

    • 当我使用 unsigned long 时,我得到如下奇怪的数字:输入整数:32 阶乘:-2147483648
    • @user3799479 尝试阅读您的作业:“当数字太大而无法容纳您的变量时,该函数将停止工作。”
    • Prince 我将如何显示先前数字的阶乘。假设我输入 6,我想显示直到 6 的所有值,如下所示:阶乘:1:1 2:2 3:6 4:24 5:120 6:720 我不知道该怎么做,这是我完全陷入困境的部分。
    • 在问题下查看 OP 的 cmets ...她/他根本没有尝试过。我怀疑 OP 甚至写了那个阶乘函数,因为写它的人肯定知道如何迭代连续的整数。
    • @user3799479 不需要证据来表达怀疑......我的理由很充分。
    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 2010-12-10
    • 2011-08-04
    • 2011-07-07
    • 2012-07-23
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多