【问题标题】:Break a number down int array and get factorial of each number - C programming将一个数字分解为 int 数组并获得每个数字的阶乘 - C 编程
【发布时间】:2015-08-02 19:22:29
【问题描述】:

对于代码的长度以及执行过程可能很乏味,我提前道歉。我正在尝试将一个数字分解为单个数字并获得每个数字的阶乘。我已经成功地做到了(在 paxdiablo 的帮助下),但我想从 99999 一直到 0。为了做到这一点,我将所有代码放在一个循环中,从 99999 开始 indx 并减小值直到它达到 1。我尝试这样做的原因是因为我需要将每个数字的阶乘总和与数字进行比较,如果它们相等,那么我有一个匹配项。程序运行,数字 99999 的第一次运行运行良好,但下一个循环应该是 99998 并执行完全相同的操作,但下一个数字是 4。我不知道它为什么会这样做。任何帮助,将不胜感激。

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int num;
    int indx;
    int fact = 1;
    int individualDigit[50];
    int length;

    for(indx = 99999; indx > 0; indx--)
    {
        num = indx;
        for (length = 0; num > 0; length++, num /= 10)
        {
            individualDigit[length] = num % 10;
        }
        printf ("Digit count = %d, digits =", length);

        for (indx = length - 1; indx >= 0; indx--)
        {
            printf (" %d", individualDigit[indx]);
        }

        for (indx = 0; indx < length; indx++)
        {
            while (individualDigit[indx] > 0)
            {
                fact = fact * individualDigit[indx];
                individualDigit[indx]--;
            }
            printf("\n%d ", fact);
            fact = 1;
        }

        printf("\n");
    }

    return 0;
}

【问题讨论】:

    标签: c sum factorial digit


    【解决方案1】:

    “indx”中的值被多个 for 循环使用。线

    for (indx = 0; indx < length; indx++)
    

    将 indx 增加到 4,这是外部循环使用的值。只需使用一些新变量来计算不同的循环

    【讨论】:

    • 谢谢!这么简单的事情!如果您也可以提供帮助,我将如何将每个单独的阶乘相加?
    【解决方案2】:

    这似乎是一个家庭作业问题,您的代码质量似乎证实了这一点,所以我很犹豫是否要为您编写实际代码,但我会给您一些建议。

    1. 正如@Cody Braun 上面所说,您在计算阶乘的第 23 行中的索引变量将被覆盖。

    2. 有一种更有效的方法可以使用dynamic programming计算阶乘

    3. 我不知道您是否只是不想在帖子中这样做,但学习 how to properly format your code 将帮助您更快地发现这些错误并保持自己的形式。以及让其他人更容易阅读您的代码。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多