Как стать автором
Обновить

Комментарии 13

(100-a)*(100-b)
10000 — 100*a — 100*b + a*b
100 * (100 — (a+b)) + a*b
Пока a*b < 100 считать можно в уме
Неоптимально и некрасиво.

Неоптимально — ну хотя бы транзитивность учесть можно было.
Некрасиво — кемел кейс и снейк кейс в однй функции.

Рано вам еще других обучать.
Вы объединяете числа неправильно. На примере 10x10:
10x10=(100-90)*(100-90)
90+90=180
100-180=-80 // здесь указаны 3-й (0) и 4-й (8) разряды итогового произведения
90*90=8100 // здесь указаны 1-й(0), 2-й(0), 3-й(1) и 4-й(8) разряды итогового произведения
итого: -8000+8100 = 100 (верно).
String strResult = String.valueOf(begin) + String.valueOf(end); // объединяем два числа в строке

Отправляет в утиль все ваши результаты.

Зачем два раза одну и ту же пару проверять? 10*90 == 90*10. Второй цикл надо начинать не от 10, а от «x». Про остальное уже сказали.
        String strResult = String.valueOf(begin) + String.valueOf(end); // объединяем два числа в строке
        int result = Integer.parseInt(strResult); // переводим стоку в int
— не самый хороший вариант.
Если использовать
        int result = 100*begin + end;

то результат будет удивительным:
Итог:
Мудрец сказал правду 8100 раз
Мудрец сказал неправду 0 раз
Более того, если просто записать в явном виде последовательность действий в 1 строку, потом раскрыть скобки, то сократится всё лишнее и останется лишь x*y.
В этот момент понимаешь, что пример на картинке всё же выглядит как конкатенация. Да и смысл в таких заморочках есть лишь при этом.
Очевидно, что если надо перемножить 11 на 12, то переходить к 89 и 88 было бы глупо.
И да, если мы говорим про конкатенацию, то видимо последнее произведение (голубые числа) должно давать именно двузначное число, иначе смысла нет.

Поиск дал лишь преподнесение этой схемы как способа умножения «больших» чисел.
Я далёк от Jаva, но код запускается без:
package denialOfTheSage01;
Просто пример:
8100. для x = 99 y = 99 Неправда!

99*99 = (100-1)*(100-1)
а)1+1 = 2
100-2 = 98
б)1*1 = 01
т.е. 99*99 = 9801, что, в общем-то, правда.

Т.е. здесь даже алгоритм элементарно неверно закодирован.
Не говоря о том, что здесь в целом всех опровержений — на листочке несколько строчек на уровне 8-го класса(ну или в каком классе сейчас тождественные преобразования изучают).
99 x 99 = (100 — 1) x (100 — 1) = (100 — 1 — 1)*100 + 1*1 = 9800 + 1 = 9801
Прав оказался мудрец, а автор двоечник!
Применительно к двузначным числам мудрец сказал как бы вот это:
[100-(100-a)+(100-b)]*100 + (100-a)*(100-b) = a*b, что последовательностью простых алгебраических преобразований подтверждается:
[100 — 100 + a — 100 + b]*100 + (100-a)*(100-b) = a*b
a*100 — 100^2 + b*100 + 100^2 — a*100 — b*100 + a*b = a*b
a*b = a*b
;)
Насколько я могу судить даже используемый в статье метод с конкатенацией даёт примерно такие результаты:
image

При этом правый нижний угол выпадает из-за не совсем верной конкатенации (теряется 0 как в примере чуть выше для 99х99).
В целом картинка интересная и явно «не случайная».

P.S. выше уже я и другие комментаторы писали, что если использовать арифметические операции, а не конкатенацию, то результат умножения в 100% случаев верен, т.к. записанную схему можно представить в виде тождественного преобразования со скобками.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории