我有一个int数组,想要找到该数组中所有值的最小公倍数(LCM)。我已经单独编写了一个
这里是我的
这是我对数组值的最小公倍数的计算结果:
当我输入一个包含数字1到5的数组
算法应该是可以工作的-我已经在我的脑海中计算过了。无法弄清楚代码的问题所在。
任何帮助将不胜感激。
lcm
方法,它需要两个值作为输入,并返回它们的LCM值。我的lcm
方法完全正常,但是当我使用它来查找所有值的LCM时,我得到了错误的答案。这里是我的
gcd
和lcm
方法:public static int gcd(int a, int b){
if (a<b) return gcd(b,a);
if (a%b==0) return b;
else return gcd(a, a%b);
}
public static int lcm(int a, int b){
return ((a*b)/gcd(a,b));
}
这是我对数组值的最小公倍数的计算结果:
public static int lcmofarray(int[] arr, int start, int end){
if ((end-start)==1) return lcm(arr[start],arr[end-1]);
else return (lcm (arr[start], lcmofarray(arr, start+1, end)));
}
当我输入一个包含数字1到5的数组
arr
,0为start
,数组长度为end
时,我得到30作为答案,但我想要60。当我输入一个包含从1到10所有数字的数组时,我得到840而不是2520。我真的无法解释这个问题。算法应该是可以工作的-我已经在我的脑海中计算过了。无法弄清楚代码的问题所在。
任何帮助将不胜感激。
lcm
吗? - johnchen902else return gcd(b, a%b);
- johnchen902