C#

时间:2017-12-04 22:16:38

标签: c# function

我必须编写一个函数来打印每个“强”整数,介于1和n之间。这些整数验证每个数字的阶乘的总和等于它自己。例如:
 145因为1! + 4! + 5! = 145.

到目前为止我做了什么:

    public static long Fac(long n)
    {
        var i = 1;
        for (; n > 1; n--)
        {
            i *= (int) n;
        }
        return i;
    }
    public static bool IsStrong(int n)
    {

        var i = 1;
        var sum = 0;
        while (n > 0)
        {
            i = n % 10;
            sum += (int)Fac(i);
            n = n / 10;
        }

        if (sum == n)
            return true;
        else

            return false;

    } 

    public static void Print_Strong(int n)
    {
        if (IsStrong(n))
            Console.Write("{0} is STRONG!  -W", n);
        else
            Console.Write("{0} is not strong. -w", n);
    }

当我运行它时,它永远不会离开循环。

1 个答案:

答案 0 :(得分:1)

您的代码中有3个问题:

  • while (n >= 0)应为while (n > 0),否则您永远不会 离开循环。
  • 如果总和等于n,则必须返回true
  • sum == n将永远不会成立,因为n最终会为0

这是一个修复:

public static bool IsStrong(int n)
{
    long sum = 0;
    int n2 = n;

    while (n2 > 0)
    {
        sum += Fac(n2 % 10);
        n2 = n2 / 10;
    }

    return sum == n;
}