Старался использовать только изученный материал.
При .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, но ведь курс предполагает решение задачи с учетом приобретенных знаний ранее НА ЭТОМ КУРСЕ…
как ти ето сделал ??? поясни пожалуйста )))
все прошло нормально:
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;
Конечно, работает только с положительными числами.