我需要这个循环的帮助。我的课程作业之一是制作LCM课程。
Sample output:
(8,12) LCM is 24
(4,3) LCM is 12
(5,10,20) LCM is 20
(18,24,52) LCM is 936
(12,10,26) LCM is 780
(99,63,24) LCM is 5544
(62,16,24) LCM is 1488
到目前为止,我有2个数字,但我不知道如何做3个数字。我们应该在其他类上使用方法,所以这就是我对LCM类的方法。
public class LCM {
private int n, x, s = 1, t = 1;
public LCM()
{
n = 0;
x = 0;
s = 1;
t = 1;
}
public int lcmFind(int i, int y) {
for (n = 1;; n++) {
s = i * n;
for (x = 1; t < s; x++) {
t = y * x;
}
if (s == t)
break;
}
return (s);
}
}
答案 0 :(得分:2)
如果您想获得3+号码的LCM,可以按照以下方式使用您的方法lcmFind
:
int a = 2;
int b = 3;
int c = 5;
LCM l = new LCM();
int lcm = l.lcmFind(l.lcmFind(a, b), c);
Reccomendations:
n
中制作x
,s
,t
和lcmFind
个变量。因为您只需要在lcmFind
方法中使用它们,并且需要在lcmFind
的每次调用中重置它们的值。 lcmFind
方法设为静态。您不需要实例化新对象以便计算lcm。这样您可以像LCM.lcmFind(3,4)
一样使用它,甚至可以更好地重命名方法并使用类似LCM.find(3,4)
的内容。 修改强>
如果您需要创建采用可变数量参数的方法,则应检查varargs。所以你会得到类似的东西:
public int lcmFind(int.. args) {
// args is actually array of ints.
// calculate lcm of all values in array.
// usage: lcmFind(1,4) or lcmFind(1,5,6,3)
}
您可以使用带有2个参数的lcmFind
的第一个版本,并使用它计算lcm的多个值。
编辑2
如果你只需要2 {3} args版本的lcmFind
,那么你可以添加3-arg版本:
public int lcmFind(int a, int b, int c) {
return lcmFind(lcmFind(a, b), c);
}
答案 1 :(得分:2)
我发现了这个link,我想这是最简单,最干净的解决方案:
-Cred
答案 2 :(得分:1)
尝试
public int lcm(int... a) {
for (int m = 1;; m++) {
int n = a.length;
for (int i : a) {
if (m % i != 0) {
break;
}
if (--n == 0) {
return m;
}
}
}
}
答案 3 :(得分:0)
static int getLCM(int a,int b)
{
int x;
int y;
if(a<b)
{
x=a;
y=b;
}
else
{
x=b;
y=a;
}
int i=1;
while(true)
{
int x1=x*i;
int y1=y*i;
for(int j=1;j<=i;j++)
{
if(x1==y*j)
{
return x1;
}
}
i++;
}
}
答案 4 :(得分:0)
我认为你已经有了答案,因为这是一篇旧帖子。仍然发布我的答案。下面是查找数组的LCM的代码:
import java.util.Arrays;
import java.util.Scanner;
public class ArrayEqualAmz {
static int lcm =1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int [] arr = new int[n];
for(int i=0; i<n; i++){
arr[i] = sc.nextInt();
}
System.out.println("lcm = "+lcm(arr));
}
// find the factor
public static int divisor(int x[]){
Arrays.sort(x);
int num=0;
for(int i=x.length-1; i>=0; i--){
if(x[i] != 1 )
num=x[i];
}
for(int j=2; j<=num; j++){
if(num%j==0){
return j;}
}
return num;
}
//finding the lcm
public static int lcm(int arr[]){
while(true){
int j = divisor(arr);
if(j==0){break;}
lcm = lcm*j;
for(int i=0; i<arr.length; i++){
if(arr[i]%j==0){
arr[i] = arr[i]/j;}
System.out.print(arr[i]+",");
}
System.out.println( " factor= "+lcm);
return lcm(arr);
}
return lcm;
}
}
答案 5 :(得分:0)
试试这个
int n1 = 72, n2 = 120, lcm;
// maximum number between n1 and n2 is stored in lcm
lcm = (n1 > n2) ? n1 : n2;
// Always true
while(true)
{
if( lcm % n1 == 0 && lcm % n2 == 0 )
{
System.out.printf("The LCM of %d and %d is %d.", n1, n2, lcm);
break;
}
++lcm;
}
答案 6 :(得分:0)
public static int gcd(int a, int b){
return (b == 0) ? a : gcd(b, a % b);
}
public static int gcd(int... args){
int r = args[0]
int i = 0;
while(i < args.lenght - 1)
r = gcd(r,args[++i]);
return r;
}
public static int lcm(int a, int b){
return a * b / gcd(a,b);
}
public static int lcm(int... args){
int r = args[0]
int i = 0;
while(i < args.lenght - 1)
r = lcm(r,args[++i]);
return r;
}
答案 7 :(得分:0)
您可以重新使用为两个数字的 lcm 编写的相同函数。只需传递以下参数之一:
函数代码可以是这样的:
public static int lcm(int num1,int num2) {
boolean flag = false;
int lcm = 0;
for(int i= 1;!flag; i++){
flag = (num1 < num2)?(num2*i)%num1==0:(num1*i)%num2==0;
lcm = num1<num2?num2*i:num1*i;
}
return lcm;
}
像这样调用函数:
public static void main(String[] args) {
System.out.println("lcm "+lcm(lcm(20,80),40));
}