2017-12-04 2 views
-3

Ich muss eine Funktion, die jede "starke" Ganzzahl zwischen 1 und n druckt. Diese Ganzzahlen verifizieren, dass die Summe der Faktoren jeder ihrer Ziffern gleich ist. Zum Beispiel:
145 weil 1! + 4! + 5! = 145.Starke Zahlen in C#

Bisher, was ich tat:

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

Wenn ich es laufen, lässt es nie die Schleife.

+0

n> = 0? Es wird nie weniger als Null sein. Aber warum nicht den Debugger benutzen? Du wirst viel lernen. – Steve

Antwort

1

Sie haben 3 Probleme im Code:

  • while (n >= 0) sollte while (n > 0) sonst werden Sie nie die Schleife verlassen.
  • Wenn die Summe gleich n müssen Sie true zurück
  • sum == n wird nie wahr sein, weil n 0 am Ende sein wird

Hier ist ein fix:

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

Perfekt! Danke. – TesterTemp