求个数不确定的整数的最大公约数(java)
题目
编程实现,求个数不确定的整数的最大公约数
题目源自java程序设计基础第八版(学习版)6章6.15题
代码
/*
编程实现,求个数不确定的整数的最大公约数
*/
class calculate_ex6_15{//定义计算的类
int ca(int[] array){//定义最主要的方法——寻找最大公约数
int min=findMin(array),ta=1;
int[] record=new int[array.length];//定义 记录 数组
for (int i=min;i>0;i--){//循环寻找最大公约数,从数组当中最小的一个值开始循环,自减
for (int j=0;j<array.length;j++){
if (Math.ceilMod(array[j],i)==0)//如果余数等于零就记录零
record[j]=0;
else//否则就记录1
record[j]=1;
}
if (exam(record)){//对 record 进行检验
ta=i;
break;
}
}
return ta;
}
boolean exam(int[] array){//定义检验方法
boolean flag=false;
for (int i=0;i<array.length;i++){
if (array[i]==1) {//如果记录值为1则 flag 等于 false ,结束循环,然后返回值
flag = false;
break;
} else if (i==array.length-1)
flag=true;
}
return flag;
}
int findMin(int[] array){//找到数组中最小的一个元素
int min=(int)Double.POSITIVE_INFINITY;//假设 min 的初始值是一个最大的整数
for (int j : array) {//通过循环寻找最小值
if (j < min)
min = j;
}
return min;
}
}
public class ex6_15 {
public static void main(String[] args) {
int[] a={13,17,15,19,31};//给定个数不确定的整数
System.out.println("最大公约数为:"+new calculate_ex6_15().ca(a));//匿名对象
}
}
运行结果
总结
一定还有优化空间,不过我目前的所学知识只能如此实现