代码之家  ›  专栏  ›  技术社区  ›  iwanttoprogram

为什么解决方案是这样的?

  •  1
  • iwanttoprogram  · 技术社区  · 17 年前

    从Java马利克教科书-确定一个数字是否可被11整除。

    提供的代码解决方案:

    import java.util.*;
    
    public class Divby11
    {
        static Scanner console = new Scanner(System.in);
    
        public static void main (String[] args)
        {
            int num, temp, sum;
            char sign;
    
            System.out.print("Enter a positive integer: ");
            num = console.nextInt();
            System.out.println();
    
            temp = num;
    
            sum = 0;
            sign = '+';
    
            do
            {
                switch (sign)
                {
                case '+' :
                    sum = sum + num % 10;
                    sign = '-';
                    break;
    
                case '-' :
                    sum = sum - num % 10;
                    sign = '+';
                }
    
                num = num / 10;       //remove the last digit
            }
            while (num > 0);
    
            if (sum % 11 == 0)
                System.out.println(temp + " is divisible by 11");
            else
                System.out.println(temp + " is not divisible by 11");
        }
    

    为什么要经过以上所有的努力,然后说…

      if (sum % 11 == 0)
                System.out.println(temp + " is divisible by 11");
            else
                System.out.println(temp + " is not divisible by 11");
    

    你们中的任何一个专家都能明白为什么作者会这样做(很长的路)?

    5 回复  |  直到 17 年前
        1
  •  0
  •   Welbog    17 年前

    这个代码示例实际上不是除以11。如果你看到了,它在每个数字的加减之间交替进行,然后在最后检查结果是否能被11整除。

    例如,看看下面的数字以及该算法如何处理它:

    Start with sum=0, sign='+', num=517
    First iteration: sum=7, sign='-', num=51
    Second iteration: sum=6, sign='+', num=5
    Final iteration: sum=11, sign='-', num=0
    

    最后的结果可以被11除尽。

    编辑:算法确实希望实现11的可除性规则 DFA 在他的回答中提到。

        2
  •  7
  •   dfa    17 年前

    对于 Divisibility Rule of 11 :

    • 形成数字的交替和
    • 如果这个和可以被11整除,那么这个数可以被11整除。

    实例

    • 68090=0-9+0-8+6=-11=>真
    • 493827=7-2+8-3+9-4=15=4=>错误
        3
  •  0
  •   amischiefr    17 年前

    你必须从书中提供更多的上下文来说明作者试图证明什么。这个代码示例不检查输入的数字是否可以被11整除。它的作用是将其他数字相加,再减去其他数字,然后检查该数字是否可以被10整除。

    前任 输入的号码是4938 加8等于和 除以十等于493 取3减去和:和=5 除以十等于49 取9加上和:和=14 除以十等于4 从和中减去4:和=10

    然后检查它是否可以被11整除。

    好吧,我现在知道为什么了。他/她想教你一些除了计算数字以外的东西

        4
  •  0
  •   Kathy Van Stone    17 年前

    我怀疑它是在模拟手动测试,奇数位置的数字和偶数位置的数字相差11倍。在实践中,使用%11是可行的方法。

    编辑:如果示例真的试图避免执行%11,它应该再次发送SUM,直到它为0。

        5
  •  0
  •   Bill K    17 年前

    它是一个演示如何实现特定检查的示例。使用您的示例不会演示相同的代码方法。