Domanda
C'è qualcosa che posso usare per vedere se un numero inizia con la stessa cifra di un altro? Ex. 5643 e 5377 iniziano entrambi con cinque.
C'è un modo per farlo con i numeri o devono essere stringhe? (StartsWith?)
Soluzione
Ich n1 e n2 sono i tuoi numeri:
return (n1.toString().charAt(0) == n2.toString().charAt(0));
Dovrai usare Integer non int, poiché int non ha un metodo .toString ().
Se n1 è un int è possibile utilizzare new Integer (n1) .toString ().
O ancora meglio (suggerito da Bombe):
String.valueOf(n1).charAt(0) == String.valueOf(n2).charAt(0)
Altri suggerimenti
Ripeti la divisione per dieci fino a quando l'intera divisione è inferiore a dieci, quindi quel numero è il primo e puoi confrontare i numeri.
È possibile calcolare la prima cifra:
public int getFirstDigit(int number) {
while (number >= 10) {
number /= 10;
}
return number;
}
(Funzionerà solo con numeri positivi.)
Ma poi potresti semplicemente confrontare il primo carattere delle rappresentazioni di String. Il confronto delle stringhe potrebbe essere più lento ma poiché il problema è & # 8220; ottenere il primo carattere della rappresentazione delle stringhe & # 8221; potrebbe essere solo la soluzione appropriata. :)
L'approccio più diretto (che consente valori di lunghezza diversi) sarebbe probabilmente proprio come hai detto, convertirli entrambi in stringhe.
int x = 5643;
int y = 5377;
String sx, sy;
sx = "" + x; // Converts int 5643 to String "5643"
sy = "" + y;
boolean match = (sx.charAt(0) == sy.charAt(0));
public static byte firstDigit(int number) {
while (true) {
int temp = number / 10;
if (temp == 0) {
return (byte) Math.abs(number);
}
number = temp;
}
(int) (a / 10 ** (int) Math.log10 (a))
Probabilmente meno efficiente della soluzione di stringa, ma nessun loop e ci mantiene nel "quoter numerico" reame.
(Ricorda sempre che quando parli del numero di cifre in un numero, log10 è tuo amico)
Inoltre non funzionerà con numeri negativi, prendi un valore assoluto di un primo.
Per ints, int n1 e int n2;
return ("" + n1).charAt(0) == ("" + n2).charAt(0);