Re: Вопрос на элегантность решения
От: vpchelko  
Дата: 03.10.14 20:55
Оценка: +2
Здравствуйте, 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 парой сточек кода.
Сало Украине, Героям Сала
Отредактировано 03.10.2014 21:07 vpchelko . Предыдущая версия . Еще …
Отредактировано 03.10.2014 21:03 vpchelko . Предыдущая версия .
Отредактировано 03.10.2014 21:01 vpchelko . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.