⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 该程序的代码
💻 JAVA
字号:
/**
 * 求若干个指定数据的最小公倍数
 */
import java.io.*;
public class Main{
    public static final int N = 10; //最多可计算数据的个数
    public static void main(String args[]) throws Exception{
        Main a = new Main();
        int n = a.input("请确定数据的个数 (2<=N<="+N+") : ",2,N); //确定数据个数
        int[] data = new int[n];
        for(int i = 0; i < n; i++){
            data[i]=a.input("",0,0);                              //输入数据
        }
        int result = a.commonMultiple(data);                      //计算
        a.output(data,result);                                    //输出
    }
    /**
     * 欧几里德辗转相除算法,求a、b两个数的最小公倍数
     */
    public int basal(int a,int b){
        int i=a,j=b,s;
        for(;j!=0&&(s=i%j)!=0;i=j,j=s);  //先求a、b的最大公约数j (欧几里德辗转相除算法)
        return (j==0?0:(a*b/j));         //得到最小公倍数 (=他们的乘积除以最大公约数)
    }
    /**
     * 分治算法,求整形数组p中所有元素的最小公倍数
     *用分治方法解决的问题,大都采用了递归的形式。
     *在各种排序方法中,如归并排序、堆排序、快速排序等,都存在有分治的思想。
     */
    public int commonMultiple(int p[]){
        if (p.length<=2){
            return (p.length==1?p[0]:basal(p[0],p[1])); //基础步
        }
        int[] t1=new int[p.length/2];
        int[] t2=new int[p.length-t1.length];
        //arraycopy(Object, int, Object, int, int) 类 java.lang.System 中的静态方法从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
        System.arraycopy(p,0,t1,0,t1.length);           //划分步1、、
        System.arraycopy(p,t1.length,t2,0,t2.length);   //划分步2
        p=null;
        int result1 = commonMultiple(t1);               //治理步1
        int result2 = commonMultiple(t2);               //治理步2
        return basal(result1,result2);                  //组合步
    }
    /**
     * 输入方法,s为提示语,若min==max表示对输入的数大小无限制;否则输入的数应满足 min<=n<=max
     */
    public int input(String s,int min,int max){
    	BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
    	int n=0;
    	for(;;){
            System.out.print(s);
            try{
                n=Integer.parseInt(buf.readLine().trim());
            }catch(NumberFormatException e){
            	System.out.println("输入错误...");
                continue;
            }catch(IOException e){
            	System.out.println(e);
            	System.exit(0);
            }
            if (min==max||n>=min&&n<=max)break;
            System.out.println("输入错误...");
        }
        return n;
    }
    /**
     * 输出方法
     */
    public void output(int[] a,int result){
        System.out.print("[");
        for (int i = 0; i<a.length; i++){
            System.out.print(a[i]+",");
        }
        System.out.println("\b] 的最小公倍数是 "+result);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -