Problema

L’obiettivo è ottenere la n-esima cifra più significativa di un numero, quindi, esempio, con il numero 56891 la prima cifra è 5, la seconda è 6, la terza è 8 e così via. L’algoritmo si basa per prima cosa sull’ottenere un sotto-numero in cui la cifra che mi interessa è nella porzione delle unità e poi fare % 10.
Per esempio nel numero 56891, se voglio ottenere la terza cifra (quindi 8) devo prima ottenere 568 e poi con il % 10 ottengo 8 che è il risultato.
Per ottenere 568 devo dividere il numero per 100, che è genericamente 10 ^ (numero di cifre iniziali (5) - cifra che voglio (3)).

Soluzione

private int PrivateGetNthMostSignificantDigit(int number, int n)  
{  
    // Converto il numero a positivo se negativo  
    number = Math.Abs(number);  
    // Ottengo il numero di cifre nel numero  
    var digitCount = (int) Math.Log10(number) + 1;  
    // Ottengo un divisore in base 10 grande come la porzione di numero che mi interessa  
    var divisor = (int)Math.Pow(10, digitCount - n);  
    // Ottengo una porzione del numero dove la cifra che mi interessa è nella porzione delle unità  
    var numberWhereDigitIsInLastPosition = number / divisor;  
    // Per ottenere qundi la cifra meno significativa di tale porzione di numero basta il normale modulo 10  
    var nthMostSignificantDigit = numberWhereDigitIsInLastPosition % 10;  
    return nthMostSignificantDigit;  
}