Найти определенную цифру числа
Вопрос
Я пытаюсь найти n
зубная цифра целого числа произвольной длины. Я собирался преобразовать целое число на строку и использовать символ при индексе ...
char Digit = itoa(Number).at(n);
... но тогда я понял itoa
Функция не стандартная. Есть ли другой способ сделать это?
Решение
(number/intPower(10, n))%10
Просто определите функцию intPower
.
Другие советы
Вы также можете использовать% оператора и / для целочисленного разделения в цикле. (Данное целое число N> = 0, N% 10 дает цифру единиц, а N / 10 отбившими от подразделений цифры.)
Вы можете использовать OSTRingStream для преобразования в текстовую строку, но функцию по строкам:
char nthDigit(unsigned v, int n)
{
while ( n > 0 ) {
v /= 10;
-- n;
}
return "0123456789"[v % 10];
}
должен сделать трюк с намного менее осложнениями. (Для начала он обрабатывает случай, когда n больше, чем число цифр правильно.)
- Джеймс Канзе.
ИТАА в stdlib.h.
Вы также можете использовать альтернативную ITOA:
Альтернатива ITOA () для преобразования целого числа строки C ++?
или
Ansi C, целое число для строки без вариационных функций
Также возможно избежать преобразования в строку с помощью функции log10., int. CMATH, который возвращает 10-й базовый логарифм числа (примерно его длина, если это была строка):
unsigned int getIntLength(int x)
{
if ( x == 0 )
return 1;
else return std::log10( std::abs( x ) ) +1;
}
char getCharFromInt(int n, int x)
{
char toret = 0;
x = std::abs( x );
n = getIntLength( x ) - n -1;
for(; n >= 0; --n) {
toret = x % 10;
x /= 10;
}
return '0' + toret;
}
Я проверил его, и отлично работает (негативные номера - это особый случай). Кроме того, его необходимо учитывать, что, чтобы найти TTHE NT-Element, вы должны «пройти» в обратном направлении в цикле, вычитание от общего int длина.
Надеюсь это поможет.
Прямой ответ:
char Digit = 48 + ((int)(Number/pow(10,N)) % 10 );
Вы должны включить <math>
библиотека
number = 123456789
n = 5
tmp1 = (int)(number / 10^n); // tmp1 = 12345
tmp2 = ((int)(tmp1/10))*10; // tmp2 = 12340
digit = tmp1 - tmp2; // digit = 5
const char digit = '0' + number.at(n);
Предположить number.at(n)
Возвращает десятичную цифру в диапазоне 0 ... 9, то есть.
Более общий подход:
template<int base>
int nth_digit(int value, int digit)
{
return (value / (int)pow((double)base, digit)) % base;
}
Просто давайте сделаем то же самое для разных базовых номеров (например, 16, 32, 64 и т. Д.).