У меня такое решение:
var number = 6567;
var quantity = 0;
while (Math.trunc(number) != 0) {
quantity++;
number /= 10;
}
console.log(quantity);
У меня такое решение:
var number = 6567;
var quantity = 0;
while (Math.trunc(number) != 0) {
quantity++;
number /= 10;
}
console.log(quantity);
Попробуй вставить number = 65478.
quantity получится на одну цифру больше.
Это не верное решение.
В этом ключе я решил так:
var number = 6567;
var quantity = 0;
while (Math.trunc(number) != 0) {
quantity++;
number /= 10;
}
console.log(quantity);
var number = 123;
var quantity = 0;
var k=1;
for (var i = 1; number / k >= 1; i++) {
k*=10
quantity ++;
}
Я это сделал! Всё работает идеально))
Мне кажется в данном задании это самое верное решение. Посмотрев другие ответы, которые мне показались слишком огромными, этот вариант явно выигрывает. Но, я, например, не знала о таком варианте.
Ну самое оптимальное решение через .length и приведение в строку, но если этого не знать, то вот:
if (number != 0) {
for (var i = 1; Math.abs(number / i) >= 1; i*= 10) {
quantity++;
}
} else {quantity = 1;}
console.log('Количество циферей: ' + quantity);
Добавлены проверки на 0 и отрицательные числа, буду рад если кто дополнит проверкой на целые числа.
var number = 123;
var quantity = 0;
while (number >= 1) {
number/= 10;
quantity++;
}
минимализм while (number>10){number/=10; quantity++}
Вопрос, скорее всего, к разработчикам (но это не точно). Почему без явного указания метода console.log в консоль выводится неверный результат:
без
с
Не разработчик: возможно это связано с тем что ++ постфиксный, а не префиксный
но это не точно
и quantity изменится не в момент наращивания, а после
Поэтому некоторые разработчики предпочитают такую запись
var number = 1234;
var quantity = 0;
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
quantity += 1;
}
смотрите как выходит с постфиксами (q++): в конце 4 итерации возвращает значение 3, увеличивает его на единицу и записывает в ячейку quantity уже 4.
если бы была префиксная форма (++q), то сначала увеличивает на единицу, возвращает 4 и записывает в переменную 4.
в консоли вы естественно видите “возврат значения”.
если же вы применяете метод console.log(value), то он вам вернет value, вопрос в какой момент вы хотите его получить.
проверьте например так:
var number = 1234;
var quantity = 0;
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
console.log(++quantity);
}
var number = 1234;
var quantity = 0;
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
console.log(quantity++);
}
Заметьте, что если вы поставите console.log(quantity) после цикла, то он и там и там даст 4.
Все, поняла) Спасибо огромное!
На мой взгляд, данный код работает только на 50%.
Ведь если будет дробное число, то выдаст, что символов явно больше, за счет того, что будет так же посчитана точка, которая разделяет целое от дробного.
У меня получилось что-то в таком духе:
var number = 1234.532;
var quantity = 0;
if (number%1 !== 0) {
console.log(quantity = number.toString().length - 1);
}else{
console.log(quantity = number.toString().length);
}
Вот ещё один вариант работы, может кому полезно будет, через Math
var number = 555555;
var quantity = 0;
var p
for (var i=0;i>=0;i++){
p = Math.trunc(number / (Math.pow(10,i)));
if(p === 0){
break
}
else{
quantity=quantity+1;
}
}
console.log(quantity);
тоже решила через преобразование в строку и вычисление number.length.
for (var i = number;Math.trunc(i) >= 1;i/=10) {
quantity++;
}
console.log(quantity);
Мдаа… тяжело мне ещё дается цикл на уменьшение интерации… Ели сделал.
После решения задачи для целых чисел:
while (number >= 1) {
number = (number * 0.1);
if (Math.round(number) >= 1) {
quantity++;
} else {
quantity++;
break;
}
}
console.log('В числе: ' + quantity + ' цифр(а_ы)!');
немного увлекся и продолжил делать для значения “0” и для отрицательных. И поскольку в курсах еще не встречал String().length, Math.abs и прочее, то рабочий вариант получился объёмным, но для всех значений (кроме дробных) - выполняется верно:
while (number >= 1 || number < 0) {
if (Math.round(number) >= 1 || Math.round(number) < -1) {
quantity++;
} else {
quantity++;
break;
}
}
if (number === 0) {
console.log('В числе 0: 1 цифра!');
} else {
console.log('В числе: ' + quantity + ' цифр(а_ы)!');
}
лучше бы время потратили на изучение “String().length, Math.abs и прочее”
var number = -11;
var quantity = 0;
while (number) {
number /= 10;
quantity++;
if (!Math.round(number)) {
break;
}
}
if (!number) {
console.log('В числе 0: 1 цифра!');
} else {
console.log('В числе: ' + quantity + ' цифр(а_ы)!');
}
вот так покороче было бы
тем более, что с отрицательными числами у вас не срослось, на -100 показывает 2 цифры, на -1000 - 3 цифры и т.д.
Поправил ваш код, чтобы работал как задумывали вы.
Добавлю на всякий случай улучшенный свой вариант, а то старые сообщения нельзя редачить.
var number = -100;
var quantity = 0;
quantity = (Math.abs(number)+[]).length;
console.log('Количество циферей: ' + quantity);
var number = -100;
var quantity = 0;
if (number) {
for (var i = 1; Math.abs(number / i) >= 1; i*= 10) {
quantity++;
}
} else {quantity = 1;}
console.log('Количество циферей: ' + quantity);
Потратил , но хотелось, следуя хронологии курсов, обойтись без них)
Спасибо за поправки, интересно было иную логику увидеть.
У меня оба варианта сработали.
С циклом FOR:
var number = 123;
var quantity = 0;
for(number; number>1; quantity++) {
number=number/10;
}
console.log(quantity);
И с циклом WHILE:
var number = 123;
var quantity = 0;
while(number>1) {
number=number/10;
quantity++;
}
console.log(quantity);
Немного жаль number в этой ситуации, кажется, мы его потеряли…
console.log(number);