2017-12-04 1 views
-3

1とnの間のすべての "強い"整数を出力する関数をコーディングする必要があります。これらの整数は、各桁の階乗の和がそれ自身と等しいことを検証します。例:
145 1! + 4! + 5! = 145C#の強い数字

は、これまでのところ、私がやったこと:私はそれを実行すると

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); 
    } 

、それがループを離れることはありません。

+0

のn> = 0?決してゼロより小さくはありません。しかし、なぜデバッガを使用していないのですか?あなたは多くを学ぶでしょう。 – Steve

答えて

1

あなたはあなたのコード内の3つの問題があります。

  • while (n >= 0)while (n > 0)する必要がありそうでない場合は、あなたが ループを離れることはありませんが。
  • 合計はあなたが真返す必要がnと等しい
  • 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; 
} 
+0

パーフェクト!ありがとうございました。 – TesterTemp