Также можно избежать преобразования в строку с помощью функции log10 , int cmath , которая возвращает десятичный логарифм числа (примерно его длину, если онбыли строки):
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;
}
Я проверил это, и работает отлично (отрицательные числа являются частным случаем).Кроме того, необходимо принять во внимание, что для того, чтобы найти n-й элемент, вы должны «пройти» назад в цикле, вычитая из общей суммы int length .
Надеюсь, что этопомогает.