问题
I have the current coding which used to be a goto but I was told to not use goto anymore as it is frowned upon. I am having troubles changing it into for say a while loop. I am fairly new to C# and programming in general so some of this is completely new stuff to me. Any help would be appreciated. The actual question is input two numbers and find the lowest common multiple.
Here is the original with 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;
}
}
回答1:
Try This:
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();
}
}
Output:
Enter 2 numbers to find LCM
8
12
LCM of 8 and 12 is 24
回答2:
Here's a more efficient and concise implementation of the Least Common Multiple calculation which takes advantage of its relationship with the Greatest Common Factor (aka Greatest Common Divisor). This Greatest Common Factor function uses Euclid's Algorithm which is more efficient than the solutions offered by user1211929 or Tilak.
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;
}
For more information see the Wikipedia articles on computing LCM and GCF.
回答3:
Try this
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
回答4:
Here is one recursive solution. It might be on some interview question. I hope it helps
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;
}
}
回答5:
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;
}
}
}
回答6:
Here is much optimized solution for finding LCM.
private static int lcmOfNumbers(int num1, int num2)
{
int temp = num1 > num2 ? num1 : num2;
int counter = 1;
while (!((temp* counter++) % num1 == 0 && (temp* counter++) % num2 == 0)) {
}
return temp* (counter-2);
}
回答7:
int n1 = 13;
int n2 = 26;
for (int i = 2; i <= n1; i++)
{
if (n1 % i == 0 && n2 % i == 0)
{
Console.WriteLine("{0} is the LCM of {1} and
{2}",i,n1,n2);
break;
}
}
来源:https://stackoverflow.com/questions/13569810/least-common-multiple