Hallo zusammen,
in der Aufgabe geht es darum, die iterierte altierende Quersumme zu ermitteln, um die Prüfsumme (10 Stelle) einer ISBN Nummer zu bestimmen.
In der Aufgabe wird folgendes Erläutert:
Beispiel: 368008783
Prüfsumme ist 7
Aber laut meiner Rechnung 10
in der Aufgabe geht es darum, die iterierte altierende Quersumme zu ermitteln, um die Prüfsumme (10 Stelle) einer ISBN Nummer zu bestimmen.
In der Aufgabe wird folgendes Erläutert:
- Die iterierte, alternierende Quersumme erhält man, indem man so lange wiederholt die alternierende Quersumme bildet bis das Ergebnis kleiner 11 ist.
- Ist das Ergebnis der iterierten, alternierenden Quersumme nicht negativ, ist der Rest der ganzzahligen Division durch 11 gefunden. Ist das Ergebnis negativ, muss noch solange 11 addiert werden, bis man einen nicht negativen Wert erhält.
Beispiel: 368008783
Prüfsumme ist 7
Aber laut meiner Rechnung 10
Java:
public class ISBN {
public static void main(String[] args) {
System.out.print("Eingabe: ");
int a = StdIn.readInt(); //Zugriff auf Standard-Eingabe
//int a = Integer.parseInt(args[0]); ///Erlaubt Eingabe einer ganzen Zahl in Terminal
//a = Math.abs(a);
int sum = 0;
int iteAltQue;
if (a > 0 && a < 999999999) { //Zahlenbereich von a && Operator für und
while (a != 0) {
sum = sum + (a % 10); //Addition der Einerstelle
a = a / 10; //Entfernen der addierten Einerstelle
sum = sum - (a % 10); //Subtraktion jeder zweiten Einerstelle
a = a / 10; //Entfernen der subtrahierten Einerstelle
}
System.out.println(sum);
if (sum > 11) {
iteAltQue = 0;
while (sum > 11) { //iterierte alternierende Quersumme bis a kleiner 11
iteAltQue = iteAltQue + (sum % 10);
sum = sum / 10;
iteAltQue = iteAltQue - (sum % 10);
sum = sum / 10;
}
} else if (sum < 0) {
iteAltQue = sum;
while (iteAltQue < 0) {
iteAltQue = iteAltQue + 11; // Negative Zahl solange + 11 bis diese positiv wird.
}
} else { //Für 0 < sum < 11
iteAltQue = sum;
}
System.out.println(iteAltQue);
}
else {
System.err.println("Value not in acceptable range 0 < a < 999999999");
}
}
}