Formel zur invertierung einer Zahl

Sniff

Mitglied
Hi.

Da ich recht neu hier im Forum bin, fange ich direkt mit meinem ersten Thread an und frage euch Löcher in den Bauch :lol:


Es handelt sich um folgendes:

Wir müssen gerade in Programmierung an der Uni ein ein komplexes Programm mit verschiedenen Methoden schreiben.

Eine von diesen Methoden soll Zahlen invertieren (ganzzahlig also int)



So nun ist meine Frage:

Wie schreibe ich bzw. wie lautet eine Formel in Java als Ausdruck umgesetzt womit ich eine Zahl invertiere/negiere ?


Das Problem an der Sache ist, wir dürfen für die Bearbeitung der Aufgabe nur Vorlesungsstoff einschließlich dieser Woche benutzen.

Also es dürfen keine fertigen Klassen, bzw Funktionen verwendet werden die uns die Arbeit erleichtern würden...

Variablen, Ausdrücke, statische Methoden, Datentypkonvertierungen,
Ausdrücke in System.out.println(.......); und bedingte Ausdrücke also z.b a > b ? a : b

sind also erlaubt.


Es geht mir also hauptsächlich um eine Formel für die Invertierung, theoretisch könnte ich diese sofern sie nicht zu kompliziert scheint dann auch in Java umsetzen. Also ein direkter Javacode muss auch nicht sein falls es nicht möglich ist. Natürlich wäre es sehr gut auch eine Quelltextversion davon zu sehen. Ich würde mich darüber sehr freuen.


Ich danke schonmal im Vorraus und hoffe das mir jemand weiterhelfen kann.
Das ganze wirkt wie eine Aufforderung hier 😀😀, aber entschuldigt ich bin echt am Verzweifeln. :rtfm:
 
Zunächst ein mal sollten wir den Begriff "invertiere/negiere" klären. Negieren ist
Code:
a=-a
, was aber als Aufgabe ziemlich witzlos ist. Ich vermute mal du willst aus "1579" > "9751" machen. Stimmt das soweit?
Die am einfachsten nachvollziehbare Lösung ist:
Code:
int i =1579;
- die Zahl als String s speichern
- leeren String sRev erstellen
- Schleife vom 1 Zeichen von s, bis zum letzten
- - sRev = aktuellesZeichen + sRev;
- sRev ausgeben
Du ließt quasi jedes Zeichen von links nach rechts ein, setzt es aber "von rechts nach links" wieder zusammen.

Eine weitere Überlegung wäre noch rekursion/while-Schleife mit Verwendung von Modulo. Versuch aber fürs erste den 1. Vorschlag umzusetzen. Dabei wären folgende Stichpunkt relevant: String#valueOf, String#length, String#charAt
 
Zuletzt bearbeitet:
Du kannst auch immer durch 10 diviedieren und mit % den Rest speichern.
Der Rest ist dann deine zahl.
Also 1234%10= 4
1234/10= 123
123%10= 3
123/10= 12
12%10= 2
12/10= 1
1%10= 1
jetzt alle % werte nehmen ==> 4321
 
@ xhelp

Erstmal ein Dankeschön für die schnelle Antwort.

Das mit dem 1579 zu 9751 stimmt mit negieren, so meinte ich das ganze.


Sorry das hatte ich vergessen zu erwähnen:

Also Beispiele zum invertieren einer Zahl liegen uns im Script der Aufgabe bei.
Diese wären:

10 --- ergibt --- 245
128 --- ergibt --- 127
255 --- ergibt --- 0

Das ganze soll halt für eine RGB Farbumrechnung verwendet werden
Beispiel:
im Stil von einem Tupel (r,g,b) -> (10,128,255)
Also sind r,g und b Variablen die ich zuvor schon irgendwo abgespeichert habe und Werte schon zugewiesen sind. Jede von den Variablen müsste ich also einzeln invertieren.

Also Schleifen,Arrays und Strings wie XHelp genannt hat dürfen wir leider "noch" nicht benutzen

Das ganze darf halt nur in einem System.out.println(); erfolgen
Wie bereits erwähnt ein bedingter Ausdruck mit (a < b ? a : b) darf benutzt werden.
Ich bin mir auch ziemlich sicher das der Prof dieses auch beeinhaltet in der Aufgabe haben möchte.
Vielleicht aber gibt es ja einen Lösungsweg der ohne auskommt. Korriegiert mich bitte wenn ich da falsch liege.

Ps: die Zahlen sind immer maximal im Wertebereich von 0 - 255

Ich hoffe das mir jemand hilft eine Lösung bei dieser eingeschränkten Aufgabe zu finden.
 
Du kannst auch immer durch 10 diviedieren und mit % den Rest speichern.
Der Rest ist dann deine zahl.
Also 1234%10= 4
1234/10= 123
123%10= 3
123/10= 12
12%10= 2
12/10= 1
1%10= 1
jetzt alle % werte nehmen ==> 4321

Dankeschön

Ich bin der Meinung das der Prof es so auch haben möchte ich probier das ganze gleich mal aus mit meinen genannten Beispielen.
 
Du möchtest das Inverse in einem Ring berechnen.

Das funktioniert mit dem erweiterten euklidischen Algorithmus

Auf keinen Fall so, wie du es in deinem letzten Posting annimmst.

Bei Z/Z 255 kann man auch durch ausporbieren machen

Wenn du 10 hast, dann suchst du eine Zahl mit der du 10 Multiplizieren musst und modulo 256 1 ergibt

Also 10 * x = 1 mod 255

Sorry das stimmt auch nicht 😉

Versuche es damit:

0 == 255
1 == 254
2 == 253 = 255- 2

Ich denke das ist trivial
 
Zuletzt bearbeitet von einem Moderator:
@Marcinek,
Du beschreibst gerade das Inverse bezüglich der Multiplikation. Die Beispiele sehen aber eher nach dem Inverse bezüglich der Addition aus.
Code:
(x + 10) mod 255 = 0;
x = 255-10 = 245;

Musst also im großen und ganzen nur die Differenz bilden.
 
@Marcinek,
Du beschreibst gerade das Inverse bezüglich der Multiplikation. Die Beispiele sehen aber eher nach dem Inverse bezüglich der Addition aus.
Code:
(x + 10) mod 255 = 0;
x = 255-10 = 245;

Musst also im großen und ganzen nur die Differenz bilden.

Habe ich erst später auch gesehen... und in der zwischenzeit den Beitrag editiert..
 
Ein großer Dank an alle! 😀

Das mit der Invertierung bezüglich der Rückführung zur Addition funktioniert prima und wird den Anforderungen der Aufgabe gerecht. So hat mir es auch heute ein Mitstudent demonstriert.


Die Sache hat sich also erledigt :toll:
 

Zurück
Oben