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

Старался использовать только изученный материал.

1 лайк

При .length если, например, number = 123.4, то при такой формуле в консоль выведется 5…
При

if (number) {
for (var i = 1; Math.abs(number / i) >= 1; i*= 10) {
quantity++;
}
} else {quantity = 1;}
console.log('Количество циферей: ’ + quantity);

  • ответ будет верным

var num: number;
var count: number = 0;
num = +prompt("Enter number");
while (num > 0) {
num = Math.floor(num / 10);
count++; }

document.write("" + count);

Вариант с делением + с проверкой на отрицательное число, на ноль (один знак) и на дробное с учетом того, что пока мы в рамках курса не знаем ни Math.abs(), ни Math.floor(), ни String.length():

var number = 1234; // -1234; 1234.56; 0
var quantity = 0;

if ((number - Math.round(number)) !== 0) {
   quantity = 'Это не целое число!';
} else {
   if (number >= 1) {
   for (i = number; i >= 1; i /= 10) {
     quantity ++;
   }
 } else if (number <= -1) {
     for (i = number; i <= -1; i /= 10) {
       quantity ++;
     }
   } else {
     quantity = 1;
     }  
}

console.log(quantity);

и тоже самое, но вариант с умножением:

var number = 1234; // -1234; 1234.56; 0
var quantity = 0;

if ((number - Math.round(number)) !== 0) {
   quantity = 'Это не целое число!';
} else {
   if (number >= 1) {
   for (i = 1; i <= number; i *= 10) {
     quantity ++;
   }
 } else if (number <= -1) {
     for (i = -1; i >= number; i *= 10) {
       quantity ++;
     }
   } else {
     quantity = 1;
     }  
}

console.log(quantity);

В задании указано, что нужно найти количество циферок именно в любых целых числах коим 123.4 не является. Так что в этом задании .length всё же выигрывает.

Хотелось придумать как можно без округлений, и числа меньше 10, получилось следующее:var number = 1 ;
var quantity = 0;

for (var i=0; i-1<quantity;i++)
{
if (number/Math.pow(10,i)>1)
{ quantity++}
else if (number<Math.abs(10)){quantity=1}}
console.log( ‘Число состоит из ‘+quantity+’ цифр(ы)’ )

Увидел похожий код, видимо не только у меня крутилось в голове 10^i

зачем мудрить, если в теории не было ни abs ни pow?
var number = 123;
var quantity = 0;

while (number >= 10) {
  quantity++;
  number /= 10;
  Math.round(number); //округление для верности
  }
  quantity++; //если условие не выполняется, то число все равно состоит хотя бы из одной цифры + решение для недостающей итерации с нулем...
console.log(quantity);

ну а так как речь идет только о положительных числах, то максимум можем прикрутить проверку на отрицательные числа обернув в условие ‘if’. Это конечно прикольно что многие знают POW ABS, но ведь курс предполагает решение задачи с учетом приобретенных знаний ранее НА ЭТОМ КУРСЕ…

1 лайк

как ти ето сделал ??? поясни пожалуйста )))

все прошло нормально:

var number = 123;
var quantity = 0;

var total=number;

while (total>=1){

 quantity++;
 
 total/=10;
                           
 console.log (total);  
 
 console.log (quantity); 
      
 }

так зачем нужен Math.abs?

собственно ТС это указал первым сообщением

Поняла,

спасибо.

var number = 1234;
var quantity = 0;

for (var i=1; i<=number; i*=10) {
  if (Math.abs(number/i) >0) {
    quantity++
}
}
console.log(quantity)

Оцените решение)

Немного отошёл от темы задания, но всё работает.

var number = 123;
var quantity = 0;

quantity = (number.toString()).length;

скобки можете опустить. js последовательно применяет методы из прототипа, т.е. length берет от number.toString() и так, т.е:

var number = 123;
var quantity = number.toString().length;

Почему у тебя темная тема ? как такую активировать ? )

var number = 12929299292;
var quantity = 1;
var i = 10;

Всё, как учили на курсе, без наворотов! Цикл ‘for’ не лучший для этой задачи, ‘while’ создан для этого.

while (i < number) {
number /= 10;
quantity += 1;
}

Это можно сделать в личном кабинете.

Мне показалось странным делать это цыклом, ИМХО есть гораздо более подходящий для таких целей способ:

Спойлер
var number = 123;
var quantity = 0;

quantity = String(number).length

К примеру такой код считает количество цифр вплоть до 309 значных, дальше как я понимаю цикл прерывается так как долго считает:

Решение через цикл

var number = 123;
var quantity = 1;
while (true) {
if (number<10){
break;
} else {
number /=10
quantity++
}
}

Ваш второй способ будет показывать всегда результат меньше на единицу, поскольку, когда число меньше десяти, вы не прибавляете счётчик. Это можно исправить так:

while (true) {
  if (number<10){
  quantity++
  break;
 } else {
  number /=10 
  quantity++
 } 
}

Ну а вообще, через цикл лучше попробовать так:

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

Только сейчас подумал о таком решении:

quantity = Math.floor(Math.log10(number)) + 1;

Конечно, работает только с положительными числами.