Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод числа, содержащий цифру 2 (https://javascript.ru/forum/misc/50867-vyvod-chisla-soderzhashhijj-cifru-2-a.html)

running 15.10.2014 00:13

Вывод числа, содержащий цифру 2
 
Ребята, подскажите пожалуйста, как из цикла:
for (i=0; i<100; i++) вывести числа, содержащие цифру 2 и саму цифру 2 ?

p.s. в названии темы опечатка "содержащее", нет возможности отредактировать.

рони 15.10.2014 00:29

running,
:cray:
<script>
for (var i=0; i<100; i++)  /2/.test(i) && document.write(i+' ')
</script>

running 15.10.2014 00:35

Цитата:

Сообщение от рони (Сообщение 335605)
running,
:cray:
<script>
for (var i=0; i<100; i++)  /2/.test(i) && document.write(i+' ')
</script>

Спасибо, большое !

danik.js 15.10.2014 08:45

рони, кстати при очень больших числах будет неправильно работать)

danik.js 15.10.2014 09:09

Решил сравнить скорость )
(function() {


function test1() {

	for (var i=0; i<1000000; i++) {
		if (/2/.test(i)) {
			//console.log(i);
		}
	}
}

function test2() {

	function containsDigit(number, digit) {
		while (number > 0) {
			if (number % 10 == digit)
				return true;
			number = (number/10)|0;
		}
		return false;
	}

	for (var i=0; i<1000000; i++) {
		if (containsDigit(i, 2)) {
			//console.log(i);
		}
	}
}


var t1 = Date.now();
test1();
t1 = Date.now() - t1;

var t2 = Date.now();
test2();
t2 = Date.now() - t2;

alert("test1: " + t1 + ", test2: " + t2);

})();

рони 15.10.2014 09:56

danik.js,
ок твой способ быстрее , мой короче - про большие числа тс не указал -- но я запомню -- спасибо за науку

BETEPAH 15.10.2014 10:47

Добавил вариант с рекурсией. Чисто для образования, так как он намнооого дольше ;)
(function() {


function test1() {

	for (var i=0; i<1000000; i++) {
		if (/2/.test(i)) {
			//console.log(i);
		}
	}
}

function test2() {

	function containsDigit(number, digit) {
		while (number > 0) {
			if (number % 10 == digit)
				return true;
			number = (number/10)|0;
		}
		return false;
	}

	for (var i=0; i<1000000; i++) {
		if (containsDigit(i, 2)) {
			//console.log(i);
		}
	}
}

function test3() {

	function containsDigit(number, digit) {
		if (number == 0) return false;
		if (number % 10 == digit) return true;
		containsDigit((number/10)|0, digit);
	}

	for (var i=0; i<1000000; i++) {
		if (containsDigit(i, 2)) {
			//console.log(i);
		}
	}
}

var t1 = Date.now();
test1();
t1 = Date.now() - t1;

var t2 = Date.now();
test2();
t2 = Date.now() - t2;

var t3 = Date.now();
test3();
t3 = Date.now() - t3;

alert("test1: " + t1 + ", test2: " + t2 +", test3: " + t3);

})();

P.S. У меня в файрфоксе вариант Рони быстрее - test1: 423, test2: 530, test3: 2131.

danik.js 15.10.2014 10:55

Ты забыл return.
У меня Firefox 32: test1: 193, test2: 39, test3: 53


Часовой пояс GMT +3, время: 02:13.