需求
定义一个方法,接收两个整数,计算并返回两个整数的最大公约数
自研算法-源代码
package com.itheima.improve;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
/**
* 定义一个方法,接收两个整数,计算并返回两个整数的最大公约数
*/
public class d30 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
create();
}
public static ArrayList<Integer> computed(int num, int n) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= num / 2 + 1; i++) {
if (num % i == 0) {
list.add(i);
}
}
return list;
}
public static void result(int num1, int num2) {
int imax = 1;//默认最大公约数
int n = num1 > num2 ? num1 : num2;
ArrayList<Integer> r1 = computed(num1, n);
ArrayList<Integer> r2 = computed(num2, n);
int max = r1.get(0);
boolean flag = true;
while (flag) {
for (int i = 1; i < r1.size(); i++) {
if (r1.get(i) > max) {
max = r1.get(i);
}
}
for (int i = 0; i < r2.size(); i++) {
if (max == r2.get(i)) {
imax = max;
flag = false;
break;
}
if (i == r2.size() - 1) {
r1.remove(Integer.valueOf(max));
max = r1.get(0);
break;
}
}
}
System.out.println("最大公约数为:" + imax);
}
public static void create() {
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
result(num1, num2);
}
}
简便算法
辗转相除法
package com.itheima.improve;
import java.util.Scanner;
/**
* 定义一个方法,接收两个整数,计算并返回两个整数的最大公约数
*/
public class d31 {
//辗转相除法
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
create();
}
public static void result(int num1, int num2) {
int big = num1 > num2 ? num1 : num2;
int small = num1 < num2 ? num1 : num2;
int res;
while (true) {
if (big % small == 0) {
res = small;
break;
}
big %= small;
int temp = big;
big = small;
small = temp;
}
System.out.println(num1 + "和" + num2 + "的最大公约数是:" + res);
}
public static void create() {
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
result(num1, num2);
}
}
附录
工具类CreateRandomArrayUtil
package com.itheima.utils;
import java.util.Random;
import java.util.Scanner;
public class CreateRandomArrayUtil {
public static int[] createRandomArr(int len, int randomNum) {// 类方法:创建随机数组
Random r = new Random();
int[] arr = new int[len];
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(randomNum) - randomNum / 2;
}
return arr;
}
}