java lcm_Java中数组中所有数字的LCM

我有一个整数数组,我试图找到该数组中所有值的LCM(最小公倍数).我已经单独编写了一个lcm方法;它接受两个值作为输入,并返回lcm.我的lcm方法工作得很好,但是当我用它来查找所有值的LCM时,我得到了错误的答案.

这是我的gcd和lcm方法:

public static int gcd(int a, int b){

if (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));

}

这是我对数组值的lcm的要求:

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作为开始并且以数组的长度作为结束的数组时,我得到30作为答案,而我想要60.当我放入一个包含所有数字的数组时从1到10,我得到840,而不是2520.我真的无法解释.

该算法应该起作用-我已经脑子里解决了.无法弄清楚我的代码出了什么问题.

任何帮助将不胜感激.

解决方法:

如果您将gcd函数更改为

public static int gcd(int a, int b){

if (a

if (a%b==0) return b;

else return gcd(b, a%b);

}

它应该工作正常.

标签:lcm,java,arrays,recursion

来源: https://codeday.me/bug/20191012/1899819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值