# Formel zur invertierung einer Zahl



## Sniff (6. Nov 2010)

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:


----------



## XHelp (6. Nov 2010)

Zunächst ein mal sollten wir den Begriff "invertiere/negiere" klären. Negieren ist 
	
	
	
	





```
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:

```
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


----------



## reinpecht (6. Nov 2010)

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


----------



## Sniff (6. Nov 2010)

@ 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.


----------



## Sniff (6. Nov 2010)

reinpecht hat gesagt.:


> 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
> ...



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.


----------



## Marcinek (6. Nov 2010)

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


----------



## XHelp (6. Nov 2010)

@Marcinek,
Du beschreibst gerade das Inverse bezüglich der Multiplikation. Die Beispiele sehen aber eher nach dem Inverse bezüglich der Addition aus.

```
(x + 10) mod 255 = 0;
x = 255-10 = 245;
```

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


----------



## Marcinek (6. Nov 2010)

XHelp hat gesagt.:


> @Marcinek,
> Du beschreibst gerade das Inverse bezüglich der Multiplikation. Die Beispiele sehen aber eher nach dem Inverse bezüglich der Addition aus.
> 
> ```
> ...



Habe ich erst später auch gesehen... und in der zwischenzeit den Beitrag editiert..


----------



## Sniff (6. Nov 2010)

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:


----------

