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;
}