题意:求多个数的最小公倍数
很简单,但是我一开始的做法,估计会让结果越界(超过int的最大值)
import java.util.*; import java.io.*; public class Main{ public static void main(String[] arg){ Scanner scan = new Scanner(new BufferedInputStream(System.in)); int n =scan.nextInt(); int[] nums = new int[1001]; while(n--!=0){ int m = scan.nextInt(); for(int i = 0 ; i != m ; i ++ ){ nums[i] = scan.nextInt(); } int lcm = 1; for(int i = 0 ; i != m ; i ++ ){ lcm = getLCM(lcm,nums[i]); } System.out.println(lcm); } scan.close(); } static int getLCM(int a,int b){//最小公倍数LCM为乘积除以最大公约数GCD return b*a/getGCD(a, b); } static int getGCD(int a,int b){//求最大公约数,辗转相除法 while(b%a!=0){ int temp = b%a; b = a; a = temp; } return a; }; }
因此,我改动了getLCM(int a,int b)方法,避免了越界情况,结果当然是Accepted
static int getLCM(int a,int b){//最小公倍数LCM为乘积除以最大公约数GCD b=b/getGCD(a, b); return b*a;}
个人感觉,这个算法还可以再优化,应该吧~
时间: 2024-11-05 06:13:42