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

时间:2009-06-18 16:18:13

标签: java

来自Java Malik教科书 - 确定一个数字是否可被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 个答案:

答案 0 :(得分:7)

代表Divisibility Rule of 11

  • 形成数字的交替总和
  • 如果这个总和可以被11整除,则该数字可以被11整除

实施例

  • 68090 = 0 - 9 + 0 - 8 + 6 = -11 => TRUE
  • 493827 = 7 - 2 + 8 - 3 + 9 - 4 = 15 = 4 => FALSE

答案 1 :(得分:0)

此代码示例实际上并没有除以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 :(得分:0)

我怀疑是在模拟手动测试,奇数位数字和偶数位数位数相差11倍。实际上使用%11就可以了。

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

答案 3 :(得分:0)

您必须从书中提供更多关于作者试图展示的内容。此代码示例不检查输入的数字是否可被11整除。它的作用是它每隔一个数字相加,减去每隔一个数字,然后检查该数字以查看它是否可被10整除。

EX 输入的数字是4938 它需要8加上它总和 除以十分给出493 采用3从sum中减去它:sum = 5 除以十分给49分 取9并将其加到sum:sum = 14 除以10给4 需要4从sum中减去它:sum = 10

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

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

答案 4 :(得分:0)

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

相关问题