打破一个数字向下int数组并获得每个数字的阶乘 - C编程

时间:2015-08-02 19:22:30

标签: c sum factorial digit

我提前为代码的长度道歉,以及可能会有多么乏味。我试图将一个数字分解为单个数字并获得每个数字的阶乘。我已经成功完成了(在paxdiablo的帮助下)但是我想从99999到0一直这样做。为了做到这一点,我已经将所有代码放在一个循环中,从99999开始indx并降低值直到它我试图这样做的原因是因为我需要比较每个数字的阶乘与数字的总和,如果它们相等,那么我就匹配了。程序运行,第一次运行数字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;
}

2 个答案:

答案 0 :(得分:2)

&#34; indx&#34;中的值正在被多个for循环使用。这条线

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

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

答案 1 :(得分:1)

这似乎是一个功课问题,你的代码质量似乎证实了这一点,所以我对你写实际代码犹豫不决,但我会给你一些指示。

  1. 正如@Cody Braun所说,你的索引变量在第23行被覆盖,你计算了阶乘。

  2. 使用dynamic programming

  3. 计算因子的更有效方法
  4. 我不知道你是不是想在帖子中做到这一点,但学习how to properly format your code会帮助你更快地发现这些错误并让自己形成这些错误。并且让其他人更容易阅读您的代码。

  5. 干杯