求N个数的最大公约数和最小公倍数
题目要求
求N个数的最大公约数和最小公倍数,用java实现
算法设计
1.输入N个数
2.将输入的数与数的多少输出
3.最后一个数与前一个数进行辗转相除以计算最大公约数
3.1得出的结果再次与前一个数进行辗转相除
3.2当计算到最后一个数时返回最终的N个数的最大公约数
4.最后一个数与前一个数的乘积除以这两个数的最大公约数以计算最小公倍数,
得出的结果再次递归调用上述方法
4.1当计算到最后一个数时返回最终的N个数的最小公倍数
5.输出得到的最大公约数与最小公倍数
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Work {
static int divisor(int a ,int b) {
if(a < b) {
int temp = a;
a = b;
b = temp;
}
int c = a % b;
while(c !=0 ) {
a = b;
b = c;
c = a % b;
}
return b;
}
static int divisorResult(List<Integer> arr ,int l) {
if(l == 1) { return arr.get(0); }
return divisor(arr.get(l - 1) , divisorResult(arr , l - 1));
}
static int multiple(int a ,int b) {
return (a * b) / divisor(a, b);
}
static int multipleResult(ArrayList<Integer> arr, int l) {
if(l == 1) { return arr.get(0); }
return multiple(arr.get(l - 1), divisorResult(arr, l - 1));
}
public static void main(String[] args) {
ArrayList<Integer> arr = new ArrayList<Integer>();
System.out.println("请输入N个非0数(按回车结束):");
Scanner in = new Scanner(System.in);
String line = in.nextLine();
Scanner enter = new Scanner(line);
while(enter.hasNextInt()){
arr.add(enter.nextInt());
}
System.out.println("输入了"+arr.size()+"个数,分别为:"+arr);
System.out.println("这"+arr.size()+"个数的最大公约数为:"+divisorResult(arr, arr.size()));
System.out.println("这"+arr.size()+"个数的最小公倍数为:"+multipleResult(arr, arr.size()));
in.close();
enter.close();
}
}