В вашем источнике 2 проблемы.
- Ваш l oop довольно странный. Эта строка:
for(var a = 1; a++ <101;){
вызовет al oop с номерами 2, 3 до 101. Таким образом, он начинается с 2 и заканчивается на 101.
Это может быть исправлено так:
for(var a = 1; ++a <101;){
(спасибо Dickens AS), но более разумный способ написать это:
for(var a = 2; a<101; a++){
Вторая проблема:
Javascript имеет (для своего обычного number
типа) ограничение на то, какие цифры можно безопасно представить. Это также называется Number.MAX_SAFE_INTEGER
или 9007199254740991
.
Числа выше этого теряют точность. Вы больше не получаете точные результаты.
Это означает, что если у вас есть 2 вычисления, которые обычно дают один и тот же результат, например:
a ** b === c ** d
Это , а не всегда верно в Javascript, потому что математика с большим числом может получить неточные результаты. Так что это действительно вариант «не делайте точных сравнений с математикой с плавающей запятой».
Против духа проекта euler вручать вам ответ, поэтому я не буду его записывать. Если вы действительно хотите, вы можете найти его в любом случае. Однако я проверил это, сделав 2 корректировки, и получил ровно 9183.
Другое редактирование: Оказывается, что для некоторых людей с Chrome вы получаете правильные ответы, даже не решая проблему большого числа. Важно отметить, что это ненадежно, хотя. Непонимание этой проблемы, вероятно, вызовет у вас головную боль в последующих проблемах Эйлера. (Спасибо ВЛАЗ)