问题:求一个数的最大公约数。程序中从大向小进行循环,直到能整除。
代码:
为什么输出的最大公约数会是97= =! ,刚开始学Java,好多不懂,求各位大佬指点指点,小弟感激不尽。
谢谢!

解决方案 »

  1.   

    这是课本上的题目,书上要求用break退出循环,不过当时我把答案盖住了,没留意这个条件,所以就没用break,自己敲了个代码,不过真心想知道出错的地方在哪里,望大家指教真的没有装逼哈哈
      

  2.   

    为什么要从大到小循环?效率不太好吧?我做了一个,你参考一下。private int maxDiv(int num) {
    int e = (int) Math.sqrt(num);
    for (int i = 2; i <= e; i++) {
    if (num % i == 0) {
    return num / i;
    }
    }
    return 1;
    }
      

  3.   

    while(k==0);改成while(k>0);初用while把while的条件搞反了。你要的是k==0结束循环,而k==0写在while中的意思继续执行循环体。
    while(k>0);的意思是k>0则继续循环,直到k==0时结束循环。
      

  4.   

    你调试一下就会发现,do循环只执行了一次,j=a-1变成98,j--变成97,所以最后j是97。把while循环里的条件改成 k!=0 就行了
      

  5.   


    public class MaxDiv { public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input=new Scanner(System.in);
    System.out.println("请输入一个数");
    int a=input.nextInt();
    int j=a;
    int k;
    do {
    j--;
    k=a%j;
    }while(k>0);
    System.out.println(a+"最大约数是"+j); }}
      

  6.   

    简单粗暴public class MaximumDivisor {
        public static void main(String[] args) {
            int num = 99;
            int i = num;
            while (i > 1) {
                if (i != num && num % i == 0) break;
                i --;
            }
            System.out.println(i);
        }
    }
      

  7.   

    public class MaxDiv {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner input=new Scanner(System.in);
            System.out.println("请输入一个数");
            int a=input.nextInt();
            int j=a;
            int k;
            do {
                j--;
                k=a%j;
            }while(k>0);
            System.out.println(a+"最大约数是"+j);
     
        }
     
    }
      

  8.   

    对do while语句的理解不对。
    这个语句的执行顺序是先执行do代码块的语句,然后判断while表达式,如果while表达式值为true则继续执行do代码块。你这个代码第一次执行while时,k=1,所以while表达式的值为false,然后就跳出循环了。所以
      

  9.   

    while(k!=0)