请高手帮我编一个程序,题目如下:
先输入一个数表示要求最大公约数的数的个数
然后分别输入如要求最大公约数的书,最后输出公约数。
如输入
3---表示要求3个数的供公约数,三个数分别如下
18
63
36
输出为
9

解决方案 »

  1.   

    2个数比较的话 用离散数学里学的 辗转相除法
    class A {
    public int f(int a,int b) {
    if (a < b) {
    int temp = 0;
    temp = a;
    a = b;
    b = temp;
    }
    int r = a % b;
    while (r != 0 ) {
    a = b;
    b = r;
    r = a % b; 
    }
    return b;
    }
    }
    LZ 改造一下就行了
      

  2.   

    import java.util.*;
    public class commondivisor
    {
    public static void main(String args[])
    {
    Scanner read=new Scanner(System.in);
    int n1,i,j,k,num=1;
    System.out.println("请输入你要输入的个数 :");
    n1=read.nextInt();
    System.out.println("请输入"+n1+"整数:");
    int arry[]=new int[n1];
    for(i=0;i<n1;i++)
    {
    arry[i]=read.nextInt();
    }
    for(j=1;j<=arry[0];j++)
    {
    for(k=0;k<n1;k++)
    {
    if(arry[k]%j!=0)
     break;
    }
    if(k==n1)
     num=j;
    }
    System.out.println("这几个数的最大公约数为:"+num);
    }
    }

      

  3.   

    import java.util.*;
    public class commondivisor
    {
    public static void main(String args[])
    {
    Scanner read=new Scanner(System.in);
    int n1,i,j,k,num=1;
    System.out.println("请输入输入的个数 :");
    n1=read.nextInt();
    System.out.println("请输入"+n1+"整数:");
    int arry[]=new int[n1];
    for(i=0;i <n1;i++)
    {
    arry[i]=read.nextInt();
    }
    for(j=1;j <=arry[0];j++)
    {
    for(k=0;k <n1;k++)
    {
    if(arry[k]%j!=0)
    break;
    }
    if(k==n1)
    num=j;
    }
    System.out.println("最大公约数为:"+num);
    }
    }

      

  4.   

    试试这个:
    package practice;import java.util.Arrays;import javax.swing.JOptionPane;//最大公约数
    public class GreatestCommonDivisor { public static void main(String[] args) {
    int num=Integer.parseInt(JOptionPane.showInputDialog("请输入数字的个数:"));
    int a[]=new int[num];
    for(int i=0;i<num;i++ ){

    a[i]=Integer.parseInt(JOptionPane.showInputDialog("请输入第"+(i+1)+"个数字"));
    }
    Arrays.sort(a);
    for(int i=1;i<=a[0];i++){
    for(int j=0;j<a.length;j++){
    if(a[j]%i!=0)
    break;

    }
    if(i==a[0]) JOptionPane.showMessageDialog(null, "最大公约数为:"+i);

    }
    }}
      

  5.   

    虽然已经结贴,但还是跟风吧,自己写了半天,不算优化,但程序结构还是值得参考的:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    public class ZuiDaGongYue { public static void main(String[] args){
    int count=readANumber("你需要求几个数的公约数?");
    int[] numbers=new int[count]; 
    for(int i=0; i<count;i++){
    numbers[i]=readANumber("请输入第 "+(i+1)+"\t个数:");
    }

    System.out.println("计算中,请稍候...");
    int result=find(numbers);
    System.out.println("最小公约数为:"+result);
    }

    private static int find(int[] number){
    int min=Integer.MAX_VALUE;
    for(int i=0; i<number.length;i++){
    if (number[i]<min){
    min=number[i];
    }
    }
    boolean find=false;
    while(min>0 && !find){
    find=true;
    for(int i=0; i<number.length;i++){
    if (((number[i]/min)*min)!=number[i]){
    find=false;
    break;
    }
    }
    if (!find){
    min--;
    }
    }
    if (min==0){
    System.out.println("没有找到!");
    }
    return min;
    }
    private static int readANumber(String hint){
    System.out.println(hint);
    BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
    String curLine;
    Integer num=null;
    do{
    try {
    curLine=r.readLine();
    num=Integer.parseInt(curLine);
    } catch (IOException e) {

    }
    if (num==null){
    System.out.println("您必须输入数字,请重新输入:");
    }
    }while(num==null);
    return num.intValue();
    }
    }