Почему решение так? - PullRequest
1 голос
/ 18 июня 2009

Из учебника Ява Малика - определите, делится ли число на 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 ]

7 голосов
/ 18 июня 2009

для Правило делимости 11 :

  • образуют переменную сумму цифр
  • если эта сумма делится на 11, то число делится на 11

Примеры

  • 68090 = 0 - 9 + 0 - 8 + 6 = -11 => ИСТИНА
  • 493827 = 7 - 2 + 8 - 3 + 9 - 4 = 15 = 4 => FALSE
0 голосов
/ 18 июня 2009

Это пример, чтобы показать, как реализовать эту конкретную проверку. Использование вашего примера не продемонстрирует те же методологии кода.

0 голосов
/ 18 июня 2009

Вы должны будете предоставить больше контекста из книги относительно того, что автор пытался продемонстрировать. В этом примере кода не проверяется, делится ли введенное число на 11. Что он делает, так это добавляет все остальные цифры, вычитает все остальные цифры и затем проверяет ТО, чтобы узнать, делится ли оно на 10

EX Введенный номер 4938 Требуется 8 добавляет его к сумме Делит на десять, давая 493 Принимает 3 вычитает его из суммы: сумма = 5 Делит на десять, давая 49 Берет 9 и добавляет к сумме: sum = 14 Делит на десять, давая 4 Берет 4 вычитает его из суммы: сумма = 10

ТОГДА проверяет, делится ли это на 11.

Хорошо, теперь я знаю почему. Он / она пытается научить вас чему-то помимо вычисления чисел

0 голосов
/ 18 июня 2009

Я подозреваю, что имитация ручного теста состоит в том, что цифры в нечетных позициях и цифры в четных позициях различаются в 11 раз. На практике использование% 11 было бы правильным.

РЕДАКТИРОВАТЬ: Если пример действительно пытался избежать выполнения% 11, он должен отправить сумму еще раз, пока она не станет 0.

0 голосов
/ 18 июня 2009

Этот пример кода не делится на одиннадцать. Если вы видите, он чередуется между сложением и вычитанием каждой цифры, а затем в самом конце проверяет, делится ли результат на 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, как dfa упоминает в своем ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...