iterierte alternierende Quersumme

M

mate_san

Neues Mitglied
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:
  • 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.
Kann mir jemand erklären, warum die Endergebnisse nicht passen?
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");
        }
    
    }
}
 
mihe7

mihe7

Top Contributor
Man kann links mit dem Subtrahieren anfangen oder rechts. Das ist halt die Frage, wie die altern. Quersumme bei Euch definiert wurde :)
 

Ähnliche Java Themen


Oben