09. Special Numbers - Решение на задача
Ето моето решение на тази задача, приемам критика. :D
https://pastebin.com/DsarAirr
Ето моето решение на тази задача, приемам критика. :D
https://pastebin.com/DsarAirr
Не е точно критика, но ще се опитам да дам някои насоки и да посоча възможни проблеми с решението.
Променливите трябва да се дефинират там, където са необходими, а не в началото на кода. Това се прави за да се минимизират възможностите за грешки и да се улесни четенето на кода.
let sum = 0;
for (let i = 1; i <= number; i++) {
sum = i % 10 + parseInt(i / 10);
}
// По-правилно е да се запише така:
for (let i = 1; i <= number; i++) {
let sum = i % 10 + parseInt(i / 10);
}
Въпреки, че JS позволява смяната на типа на променливите, това е лоша практика и тябва да се избягва:
let answer = ''; // answer е от тип String
// ...
answer =
sum === 5 ||
sum === 7 ||
sum === 11;
// answer вече е от тип Boolean
///////////////// Правилно е да се запише така
let answer = True; // Boolean type
//....
answer = sum === 5 || sum === 7 || sum === 11; // Boolean type
Решението няма да работи коректно за числа с повече от 2 цифри.
Например за 104 ще изведе False, вместо True ( 1+0+4 = 5, т.е. специално число).
Примерно решение:
function solve(number) {
for (let i = 1; i <= number; i++) {
let currentNum = i; // копираме стойността на i в нова променлива, защото ще трябва да я променяме
let sumOfDigits= 0;
while (currentNum > 0) { // въртим този цикъл докато не стигнем 0, т.е. обходили сме всички цифри на числото
sumOfDigits += currentNum % 10; // към sumOfDigits добавяме стойността на последната цифра, напр. от 345 ще вземем 5
currentNum = Math.trunc(currentNum / 10); // премахваме последната цифра от числото, напр. 345 ще стане 34
}
const isSpecialNumber = sumOfDigits === 5 || sumOfDigits === 7 || sumOfDigits === 11;
// използваме const, защото isSpecialNumber няма да бъде променяно
console.log(isSpecialNumber ? `${i} -> True` : `${i} -> False`);
}
}
Може ли коментари и за следния код. Тази практика добра ли е за Javascript или подходът е грешен, въпреки че кодът дава 100/100 в judge.
@engenginy
Подходът не е грешен, но използването на String за да достъпим отделните цифри не е оптимално. Компютрите са изчилителни машини, оптимизирани за работа с числа. Използването на абстракции е възможно и необходимо за решаване на по-сложни проблеми, но почти винаги идва с цена откъм производителност.