Hier mittleren Zahl in eine Ganzzahl in Java
Habe ich einen integer in java "1234567" und mein Programm findet der mittleren Ziffer in einer Reihe von integer -, ist es mehr optimiert als unter code?. Vor kurzem fragte, in java interview.
Was ich gemacht habe, ist zunächst keine Ziffern, ersten, letzten und mittleren Indizes. Dann finden Sie mitten in Ziffer wieder überarbeiten, gleiche ganze Zahl. Bitte um Rat, einige Optimierungen.
int a1 = 1234567;
int a = a1;
//calculate length
int noOfDigits = 0;
while(a!=0)
{
a = a/10;
noOfDigits++;
}
int first = 0;
int last = noOfDigits-1;
int middle = (first+last)/2;
boolean midExists = ((a1%2)==1);
System.out.println(" digits: "+a1);
System.out.println(" no of digits "+noOfDigits);
System.out.println(" first "+first);
System.out.println(" last " + last);
if(midExists)
{
System.out.println(" middle " + middle);
int i = last;
int middleDigit = 0;
a = a1;
while(i != middle)
{
a = (a / 10);
middleDigit = (a%10);
i--;
}
System.out.println("middle digit: " + middleDigit);
}
else
System.out.println(" Mid not Exists.. ");
Programm-Ausgabe:
digits: 1234567
no of digits 7
first 0
last 6
middle 3
middle digit: 4
- was ist mit dem char length/2-1??
- int numberOfDigits = String.valueOf(a1).length(); statt der while-Schleife
- Würde ich konvertieren String-und die bekommen in der Mitte der Zeichenfolge.
- Ich habe zu tun, die ohne die Verwendung von Sprache-Methoden wie length () oder die Konvertierung in array oder string
- Anmerkung: Sie brauchen nicht
first
.int middle = last/2;
- Für das Protokoll: ich umformuliert ersten Absatz hinweisen, der einen trick, die möglich ist, um Ihren code zu vereinfachen. Aber das funktioniert nur im Fall, dass Sie erlaubt sind zu verwenden Math.log10() für diese Aufgabe.
- Vielen Dank für diese erklärende Antworten 🙂 Verstanden, andere Dinge als die wichtigste Voraussetzung für meine Frage 🙂 Entschuldigung für nicht zu erwähnen, dass die Sprache, die Methoden sind nicht erlaubt 🙂
- Sie sind sehr willkommen. Und hey, Sie erreichte 100 heute. Herzlichen Glückwunsch 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie auch dies in einem Durchgang. Idee ist, die erste Filiale der
integer
in der anderen variable. Verschieben Sie dann die zwei Ziffern Links in eineminteger
während nur eine Zahl in der anderen.=
zu viel in der letzten ZeileIhre "math" arbeitet korrekt. Das einzige, was Sie können: berechnen Sie die Länge (Anzahl der Ziffern), die innerhalb Ihrer Anzahl im Voraus, um zu vermeiden, "Durchlaufen" die Anzahl zweimal - Sie können also bestimmen, wenn die Anzahl der Ziffern gerade oder ungerade ist ohne "Durchlaufen" der Nummer:
sollten geben Sie 4 für 1234, und 5 für die 12345.
Aber darüber hinaus: Sie können express-Informationen auf unterschiedliche Weise. Zum Beispiel: Sie können ein int Wert in eine Zeichenfolge.
Und jetzt: Sie können leicht überprüfen, die Länge der Zeichenfolge, und Sie können auch direkt auf den entsprechenden Charakter!
Die einzige Sache im Auge zu behalten: Charaktere verkörpern Nummern wie '1', '2', ... haben verschiedenen numerische Werte als int 1, 2, ... (siehe ASCII-Tabelle; als '1' ist 49 wenn in Bezug auf den numerischen Wert)!
System.out.println(str.charAt(str.length() / 2));
drucken wird der richtige Wert, also 4 in diesem Falldiese Antwort hat weniger code, aber wäre es nicht viel in der Leistung denke ich:
a1=1233
. Hat Mitte existieren? Dein code drucktYes
.Math
Operationen sind nicht erlaubt. ansonsten gute Antwort von dirI have to do that without using language methods like length(), or converting it to array or string
ich denke, das deckt die builtin-Methoden wie length() ist auch eine vordefinierte MethodeNur mithilfe der Mathematik