2012-11-26 11 views
15

Ich habe die aktuelle Codierung, die ein Goto war, aber ich wurde gesagt, nicht mehr zu verwenden, da es verpönt ist. Ich habe Probleme, es für eine Weile zu ändern. Ich bin ziemlich neu in C# und Programmierung im Allgemeinen, so dass einige davon völlig neue Sachen für mich sind. Jede Hilfe wäre willkommen. Die eigentliche Frage ist, zwei Zahlen einzugeben und das niedrigste gemeinsame Vielfache zu finden. HierLeast Common Multiple

ist das Original mit goto:

BOB: 
    if (b < d) 
    {     
     a++; 
     myInt = myInt * a; 
     b = myInt; 
     myInt = myInt/a; 

     if (b % myInt2 == 0) 
     { 
      Console.Write("{0} ", h); 
      Console.ReadLine(); 
     } 

    } 
    if (d < b) 
    { 
     c++; 
     myInt2 = myInt2 * c; 
     d = myInt2; 
     myInt2 = myInt2/c; 

     if (d % myInt == 0) 
     { 
      Console.Write("{0} ", t); 
      Console.ReadLine(); 
     } 
     else 
     { 
      goto BOB; 
     } 

    } 
    else 
    { 
     goto BOB; 
    } 

    } 
+2

Was ist, wenn 'd' == 'b'? Es wäre auch viel einfacher, wenn Sie uns den ursprünglichen Code zeigen, der 'goto' enthält. Sonst könnte ein schnelles Google nach "C# least common multiple" einige nützliche Ergebnisse zeigen ... –

+0

Noch wichtiger ... was ist die Frage? – musefan

+0

Wenn dies Hausaufgaben sind, möchten Sie vielleicht mit Ihrem TA sprechen. – plinth

Antwort

11

Versuchen Sie folgendes:

using System; 

public class FindLCM 
{ 
    public static int determineLCM(int a, int b) 
    { 
     int num1, num2; 
     if (a > b) 
     { 
      num1 = a; num2 = b; 
     } 
     else 
     { 
      num1 = b; num2 = a; 
     } 

     for (int i = 1; i < num2; i++) 
     { 
      if ((num1 * i) % num2 == 0) 
      { 
       return i * num1; 
      } 
     } 
     return num1 * num2; 
    } 

    public static void Main(String[] args) 
    { 
     int n1, n2; 

     Console.WriteLine("Enter 2 numbers to find LCM"); 

     n1 = int.Parse(Console.ReadLine()); 
     n2 = int.Parse(Console.ReadLine()); 

     int result = determineLCM(n1, n2); 

     Console.WriteLine("LCM of {0} and {1} is {2}",n1,n2,result); 
     Console.Read(); 
    } 
} 

Ausgang:

Enter 2 numbers to find LCM 
8 
12 
LCM of 8 and 12 is 24 
+10

Vielen Dank, aber ich möchte lernen, was ich tue und nicht nur von jemand anderem nehmen .. –

1

Versuchen Sie, diese

int number1 = 20; 
int number2 = 30; 
for (tempNum = 1; ; tempNum++) 
{ 
    if (tempNum % number1 == 0 && tempNum % number2 == 0) 
    { 
     Console.WriteLine("L.C.M is - "); 
     Console.WriteLine(tempNum.ToString()); 
     Console.Read(); 
     break; 
    } 
} 

// output -> L.C.M is - 60 
+0

Es funktioniert, dauert aber länger als die andere Antwort , +1. – Renan

25

Hier ist eine effizientere und prägnantere Implementierung der Berechnung des kleinsten gemeinsamen Vielfachen, die ihre Beziehung zum größten gemeinsamen Faktor (auch bekannt als größter gemeinsamer Teiler) ausnutzt. Diese Greatest-Common-Factor-Funktion verwendet den Euklid-Algorithmus, der effizienter ist als die von user1211929 oder Tilak angebotenen Lösungen.

static int gcf(int a, int b) 
{ 
    while (b != 0) 
    { 
     int temp = b; 
     b = a % b; 
     a = temp; 
    } 
    return a; 
} 

static int lcm(int a, int b) 
{ 
    return (a/gcf(a, b)) * b; 
} 

Weitere Informationen finden Sie in den Wikipedia-Artikel auf LCM und GCF berechnen.

+0

Für mehr als zwei Zahlen, siehe http://stackoverflow.com/a/29717490/68936 – Jimmy

0

Hier ist eine rekursive Lösung. Es könnte auf einer Interviewfrage sein. Ich hoffe, es

public static int GetLowestDenominator(int a, int b, int c = 2) 
    { 
     if (a == 1 | b == 1) { 
      return 1; 
     } 
     else if (a % c == 0 & b % c == 0) 
     { 
      return c; 
     } 
     else if (c < a & c < b) 
     { 
      c += 1; 
      return GetLowestDenominator(a, b, c); 
     } 
     else 
     { 
      return 0; 
     } 
    } 
0
 int num1, num2, mull = 1; 

     num1 = int.Parse(Console.ReadLine()); 
     num2 = int.Parse(Console.ReadLine()); 

     for (int i = 1; i <= num1; i++) 
     { 
      for (int j = 1; j <= num2; j++) 
      { 
       if (num1 * j == num2 * i) 
       { 
        mull = num2 * i; 
        Console.Write(mull); 
        return; 
       } 
      } 
     } 
0

hilft LCM Hier wird viel optimierte Lösung für die Suche.

private static void lcmOfNumbers(int num1, int num2) 
    { 
     int temp = num1 > num2 ? num1 : num2; 
     int counter = 1; 
     while (!(temp % num1 == 0 && temp % num2 == 0)) 
     { 
      temp = temp * counter; 
      counter++; 
     } 
     Console.WriteLine("Answer: "+temp); 
    }