Испытание "Сколько цифр?"

Я делал проще:
var quantity = 1;
забыл о том что менял значение с 0 на 1, ну в числе как минимум 1 цифра то полюбому будет

Почему выдаёт ошибку “Timeout error”, чего не так-то???

var x = 1;
var quantity = 0;
while ((number / x) > 1) {
quantity++;
x *= 10;}
console.log (quantity)

ошибку эту выдаёт если не ошибаюсь если цикл бесконечный, видимо у тебя всё время условие выполняется…

Но ваш код у меня работает без проблем…
Правда я его в местной среде запускал.

Также код выполняется без ошибок. Пришлите скриншот, пожалуйста.

господа, все выполняется верно, дааа)
видимо, изначальная невнимательность моя)
спс)

var number = 23515625621;
var cutNumber = number;
var quantity = 0;
var i = 0;

while(quantity <= number && cutNumber > 1){

if(cutNumber >= 1){

cutNumber = cutNumber/10;

console.log(cutNumber);
quantity++;
} 

}

console.log(quantity);

у меня получилось вот так

var number = 123;
var quantity = 0;

while(number >= 1){
number/=10;
quantity++
}
console.log(quantity)

2 лайка

я сравниваю с десятками, сотнями итд

var number = 123;
var quantity = 1;
var compare = 10;

while (number > compare) {
compare = compare * 10;
quantity++;
}

2 лайка

Рекомендую использовать свойства STRING
var number = 123;
var quantity = number.toString().length;

quantity = String(number).length;

1 лайк

Используя только цикл for (другого пока что не знаю):
var number = 123;
var quantity = 0;

for (i=number; i > 1; i = i / 10) {
quantity+=1;
}


Результаты сходятся :slight_smile:

Результаты сходятся, но вывод через console.log здесь не нужен.
Можно создать какую-то другую переменную, в которую записать строку. А в переменную quantitu уже записать длину строки. Т. е. quantity должна содержать число, а не строку

Вот такое решение тоже сработало:
while (number > 0) {
number = Math.trunc(number / 10);
quantity++;
}

У меня такое же не сработало, т.к. начальное значение quantity = 0 и один разряд не учитывается. Либо задавать начальное значение quantity = 1, либо еще что-то придумывать. Я добавила еще условие:

Получилось так

if (Math.trunc(number/10) === 0){
quantity = 1;
}
else{
quantity = 1;
while(Math.trunc(number/10) > 0) {
number = Math.trunc(number/10);
quantity ++;
}
}
console.log(quantity);

Мой вариант решения, довольно лаконичный, как мне кажется:

var number = 123.2;
var quantity = 0;

quantity = Math.round(number).toString().length
console.log(quantity)

Мой вариант в копилку решений, с бесконечным циклом, модулем и десятичным логарифмом.
let number = 123;
let quantity = 0;
let i = 10;
while(1) {
if (Math.abs(number) < i) {
quantity=Math.log10(i);
break;
}
i *= 10;
}

Очень простой способ в копилку решений

let number = 123;
let quantity = 0;
let del = 1; //Делитель

while ((number/del) >= 1) {
quantity++;
del *=10;
}

let number = 123;
let quantity = 0;

quantity = String(Math.trunc(number)).length;

/Решение через длину строки. Math.trunc откидывает цифры после точки, если будет дробное число). Это лучше, чем Math.round - потому что он округляет до большего, если после точки стоит цифра от 5 до 9 (8.5 … 8.9) и если было 9.9 - оно станет 10./

while (number >= 1) {
number = number / 10
quantity++
console.log(quantity)
}

достаточно коротко и просто, но если бы не было темы циклов, то самый выигрышный вариант, преобразования числа в строку, где ф-ия str.length элементарно высчитывает кол-во символов