Информация об изменениях

Сообщение Re: Вопрос на элегантность решения от 03.10.2014 20:55

Изменено 03.10.2014 21:07 vpchelko

Здравствуйте, Shmj, Вы писали:

S>Вопрос: определить что вторая слева цифра числа делится на 3.


S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).


S>Решение должно быть понятным и быстрым.


Как бэ тут обглодали аналогичную тему:

http://stackoverflow.com/questions/701322/how-can-you-get-the-first-digit-in-an-int-c

Самое быстрое и в принципе понятное будет:
if (i >= 100000000) i /= 100000000;
if (i >= 10000) i /= 10000;
if (i >= 100) i /= 100;
if (i >= 10) i /= 10; // тут имеем число из 2 левых цифр
i = i % 10; // тут вторая слева цифра
if (i % 3 == 0) {
  // вторая слева цифра числа делится на 3
} else {
  // вторая слева цифра числа НЕ делится на 3
}
Re: Вопрос на элегантность решения
Здравствуйте, Shmj, Вы писали:

S>Вопрос: определить что вторая слева цифра числа делится на 3.


S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).


S>Решение должно быть понятным и быстрым.


Как бэ тут обглодали аналогичную тему:

http://stackoverflow.com/questions/701322/how-can-you-get-the-first-digit-in-an-int-c

Самое быстрое и в принципе понятное будет:
if (i >= 100000000) i /= 100000000;
if (i >= 10000) i /= 10000;
if (i >= 100) i /= 100;
if (i >= 10) i /= 10; // тут имеем число из 2 левых цифр
i = i % 10; // тут вторая слева цифра
if (i % 3 == 0) {
  // вторая слева цифра числа делится на 3
} else {
  // вторая слева цифра числа НЕ делится на 3
}

Решение можно приспособить к int64 и int128 парой сточек кода.