Сообщение Re: Вопрос на элегантность решения от 14.12.2018 13:02
Изменено 14.12.2018 13:05 goto
Re: Вопрос на элегантность решения
Здравствуйте, Shmj, Вы писали:
S>Вопрос: определить что вторая слева цифра числа делится на 3.
S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).
S>Решение должно быть понятным и быстрым.
Можно найти вторую цифру без строк через log10() и pow(). Плавающая математика у Интел очень быстрая.
S>Вопрос: определить что вторая слева цифра числа делится на 3.
S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).
S>Решение должно быть понятным и быстрым.
Можно найти вторую цифру без строк через log10() и pow(). Плавающая математика у Интел очень быстрая.
int SecondDigit( int v ) // v - наше число
{
if ( v < 0 ) v = -v;
if ( v < 10 ) return v;
int n = (int)log10((double) v); //число цифр -1
return v / (int)pow(10.0, n - 1) % 10;
}
Re: Вопрос на элегантность решения
Здравствуйте, Shmj, Вы писали:
S>Вопрос: определить что вторая слева цифра числа делится на 3.
S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).
S>Решение должно быть понятным и быстрым.
Можно найти вторую цифру без строк через log10() и pow(). Плавающая математика у Интел очень быстрая.
S>Вопрос: определить что вторая слева цифра числа делится на 3.
S>Примеры: 13, 89022 -- делится (3 и 9), 725933 -- не делится (2).
S>Решение должно быть понятным и быстрым.
Можно найти вторую цифру без строк через log10() и pow(). Плавающая математика у Интел очень быстрая.
int SecondDigit( int v ) // v - наше число
{
if ( v < 0 ) v = -v;
if ( v < 10 ) return -1; // второй цифры нет - вернуть -1 для примера
int n = (int)log10((double) v); //число цифр -1
return v / (int)pow(10.0, n - 1) % 10;
}