Guten Tag weiss jemand wie ich die Quersummer einer zahl errechne...
Beispiel... von 59 ist die Quersumme 5+9 = 14 ;
Dabei soll die Variable in eine Zahl eingegeben werden !
kingbozz Gast |
kingbozz Gast |
Guten Tag weiss jemand wie ich die Quersummer einer zahl errechne...
Beispiel... von 59 ist die Quersumme 5+9 = 14 ;
Dabei soll die Variable in eine Zahl eingegeben werden !
Hast du dir denn schonmal ernsthaft Gedanken dazu gemacht? Wie würdest du denn rangehen an die Sache?
Ich hab selber auch keinen passenden Algorithmus auf Lager. Aber die Problemstellung ist simpel. Da muss sich doch etwas zusammenreimen lassen.
Also, wie sieht's aus? Irgendwelche Ideen?
greez
JoSsiF
Für den Fall, dass du dich mit Java nicht so auskennst:
Wenn du ne int-Zahl durch 10 teilst, dann bekommst du wieder ne int-Zahl (Nachkommastellen werden einfach abgeschnitten)
Wenn du ne Ganzzahl MODULO rechnest, dann bekommst du den Rest, wenn du durch 10 teilen würdest. In Java schreibt man für Modulo ein Prozentzeichen...
Beispiel
int i=123;
System.out.println(i / 10);
System.out.println(i % 10);
Ausgabe:
12
3
Denn 123/10 = 12 Rest 3
Pack das in ne Schleife, denk selber bisl drüber nach...
Schöner Ansatz, daran hatte ich noch gar nicht gedacht
Und es zeigt auch mal wieder, dass viele Wege nach Rom führen. Für den Fall, dass die Zahl eingegeben werden soll, würde sich noch eine andere Lösung anbieten:
Nach der Eingabe liegt die Zahl als String vor. Diesen String könnte man "Ziffer für Ziffer" (also eigentlich: Zeichen für Zeichen) zerhacken, dann auf int casten und den ganzen Schotter aufsummieren.
Jetzt brauchst du nur mal abchecken, welche Lösung für dich besser geeignet wäre - oder eine weitere erfinden ...ja, und dann das Ganze in ein Stück Code pressen.
greez
JoSsiF
kann mir mal jemand helfen ich komme irgendwie nicht klar....komme in eine endlos schleife mit falschen ergebnis...
int quersumme,QuersummeDurchZehn, QuersummeModulu;
Scanner sc= new Scanner (System.in);
System.out.print("Quersumme: ");
quersumme = sc.nextInt();
while(quersumme>10)
{
QuersummeDurchZehn = quersumme/10;
QuersummeModulu = quersumme%10;
System.out.println("Durch 10: "+QuersummeDurchZehn);
System.out.println("Modulu : "+QuersummeModulu);
if(quersumme<10)break;
}
}
}
du musst die einzelnen modulos natürlich addieren... das mit der ausgabe oben war nur um dir zu verdeutlichen was da raus käme...
int zahl = 123;
int quersumme = 0;
while (zahl > 0) {
quersumme += zahl%10;
zahl=zahl/10;
}
System.out.println("Quersumme: "+quersumme);
du musst die einzelnen modulos natürlich addieren... das mit der ausgabe oben war nur um dir zu verdeutlichen was da raus käme...
int zahl = 123;
int quersumme = 0;
while (zahl > 0) {
quersumme += zahl%10;
zahl=zahl/10;
}
System.out.println("Quersumme: "+quersumme);
Hi |
Nö, ein Try-Catch-Block passt da eher weniger. Das nimmste, wenn eine Methode eine Exception werfen könnte.
Es handelt sich bei deinem Vorhaben um eine simple Validierung. Du könntest dir eine Funktion bauen, die die Eingabe auf Gültigkeit prüft und dann true oder false ausgibt. Entsprechend müsstest du reagieren, z.B. eine Fehlermeldung ausgeben und den Nutzer zur erneuten Eingabe auffordern.
greez
JoSsiF
@gumpi: try/catch ist imo gar nicht so verkehrt um zumindest auf ne ganze Zahl zu prüfen...
Schau dir mal die Methode Integer.parseInt(String s) an.
Falls das gut geht, kannst du danach ja noch weitere Prüfungen durchführen (z.B. >=0 oder so).
try/catch ist imo gar nicht so verkehrt um zumindest auf ne ganze Zahl zu prüfen...
Schau dir mal die Methode Integer.parseInt(String s) an.
Hi, habs mir grad durchgelesen.
Also meiner Meinung nach müsste das mit folgendem Code perfekt gehen:
try {
int src = new Scanner(System.in).nextInt();
}catch(NumberFormatException e) {
System.out.printl("DU TROTTEL, QUERSUMME EINER ZAHL!!");
return;
}
String s = "" + src;
int[] numbers = new int[s.length()];
for(int i = 0; i < s.length(); i++) {
numbers = Integer.parseInt(s.charAt(i));
}
int erg = 0;
for(int i : numbers) {
erg+=i;
}
System.out.println("Die Quersumme ist: " + erg);
mfg.
P.S. der Code ist NICHT getestet, bin bei meiner Oma, und hab kein Java installiert, der is so aus m Kopf rausgeschrieben. Also bei Groß/Klein schreibung werden sicher Fehler sein, ausserdem bin ich nicht ganz sicher ob man Primitive Datentypen in einer For-Each schleife verwenden darf (glaub schon, wenn net schreibt halt "Integer" hin).
Also ich bin wieder zhaus, und hab den Code nochmal überdacht und in Eclipse ausprogrammiert, im Endeffekt bin ich zu 2 Lösungen gekommen:
1. Die Ausfuehrliche Variante:
System.out.print("Bitte gib eine Integer Zahl ein, von der du die Quersumme moechtest: ");
int zahl = 0;
try {// falls ein Text eingegeben wird oder eine zu grosze/kleine Zahl
zahl = new Scanner(System.in).nextInt();
} catch(NumberFormatException e) {
System.out.println("Bitte gib eine Integer-Zahl ein (" + Integer.MIN_VALUE + " - " + Integer.MAX_VALUE + ")");
return;
}
String nums = "" + zahl; //die Zahl als Text um jedes Zeichen heraus zu loesen
int erg = Integer.parseInt("" + nums.charAt(0)); // ergebniss
System.out.println(); //neue zeile
System.out.print(erg);
for (int i = 1; i < nums.length(); i++) {
System.out.print(" + " + nums.charAt(i));
erg+= Integer.parseInt("" + nums.charAt(i));
}
System.out.print(" = " + erg);
und 2. die Leichterere Variande die etwas besser verstanden werden kann:
System.out.println("Bitte eine Zahl eingeben: ");
int zahl = 0; //die Zahl um die es sich dreht
try {// falls ein Text eingegeben wird oder eine zu grosze/kleine Zahl
zahl = new Scanner(System.in).nextInt();
} catch(NumberFormatException e) {
System.out.println("Bitte eine Integer-Zahle eingeben, sonst nichts");
return;
}
String ziffern = "" + zahl; //Die selbe Zahl als String, um jedes Zeichen heraus zu loesen.
int zif[] = new int[ziffern.length()]; //array, um jede Ziffer einzeln zu speichern
for (int i = 0; i < zif.length; i++) //for-schleife die ueber die Ziffern drueber geht
zif = Integer.parseInt("" + ziffern.charAt(i));//Integer.parseInt, wandelt einen String in eine Zahl um
int sum = 0; //das End ergebniss
for (int i = 0; i < zif.length; i++)
sum += zif; //die Ziffern zusammenzaehlen, selbes wie "sum = sum + zif";
System.out.println("Quersumme = " + sum);
Also der Code ist getestet. Wobei ich irgendwie glaube, des braucht sowieso jetzt keiner mehr^^.
mfg.
Also ich hab das ganze so gelöst
Allerdings endet mein Programm erst bei 0.
import java.util.*;
public class Quersummen {
public static void main(String[]args){
Scanner eingabe= new Scanner (System.in);
long qs; //Quersumme
long r;
long zahl2; //neue Zahl nach teilen durch 10
long zahl;
do{
do{
System.out.println("Bitte geben sie eine positive Zahl ein, 0 beendet das Prgramm:");
zahl= eingabe.nextLong();
}while (zahl<0);
do{
r=zahl%10;
zahl2=zahl/10;
qs= r+zahl2;
zahl=qs;
//System.out.println("Bisherige Schritte: " +zahl);
}while(qs>=10);
System.out.println("Die einstellige Quersumme der eingegebenen Zahl ist: "+qs);
}while (zahl!=0);
System.out.println("Das Programm wurde beendet!");
}
}
Hallo, ich bin noch ein Anfänger und versuche gerade erst durch den Stoff durchzusteigen, bitte keine Haue
Folgendes Problem: ich soll eine Quersumme von der Zahl 1543 (als Beispiel, beliebige vierstellige Zahl) bestimmen, und zwar gibt es einige Vorgaben:
- die Quersumme einer natürlichen Zahl soll berechnet werden
- wenn der Anwender eine negative ganze Zahl eingibt, wir diese mit (-1) multipliziert
- für den ganzzahligen Rest soll der Modulooperator (%) eingesetzt werden, für die Berechnung ganzzahliger Quotienen der Divisionsoperator (/)
- die Summanden der Quersumme werden in einer Schleife berechnet. Nach Ende der Schleife wird die Quersumme ausgegeben
soviel dazu. so sieht im Moment mein Programm aus:
class A1B3
{public static void main(String args[])
{int q=1543;
int su=1;
int m=10;
System.out.println("Quersumme");
while (q>=1)
{ su=q%m;
{ System.out.println(q+"%"+m+"="+su);
q=q/m;
}
System.out.println("Ende der Berechnung");
}
}
}
ich hab die Summanden ausgegeben. Problem ist jetzt aber, wie ich die Summanden am Ende der Schleife addiere, um auf die Quersumme zu kommen. Wie mache ich das denn? Und das mit der Multiplikation von (-1) hab ich auch nocht nicht ganz begriffen...hoffe ihr könnt mir helfen.
Hallo, ich bin noch ein Anfänger und versuche gerade erst durch den Stoff durchzusteigen, bitte keine Haueif(zahl < 0) zahl * -1;
Folgendes Problem: ich soll eine Quersumme von der Zahl 1543 (als Beispiel, beliebige vierstellige Zahl) bestimmen, und zwar gibt es einige Vorgaben:
- die Quersumme einer natürlichen Zahl soll berechnet werden
- wenn der Anwender eine negative ganze Zahl eingibt, wir diese mit (-1) multipliziert
- für den ganzzahligen Rest soll der Modulooperator (%) eingesetzt werden, für die Berechnung ganzzahliger Quotienen der Divisionsoperator (/)Und jetzt zum Rest:
- die Summanden der Quersumme werden in einer Schleife berechnet. Nach Ende der Schleife wird die Quersumme ausgegeben
soviel dazu. so sieht im Moment mein Programm aus:
class A1B3
{public static void main(String args[])
{int q=1543;
int su=1;
int m=10;
System.out.println("Quersumme");
while (q>=1)
{ su=q%m;
{ System.out.println(q+"%"+m+"="+su);
q=q/m;
}
System.out.println("Ende der Berechnung");
}
}
}
ich hab die Summanden ausgegeben. Problem ist jetzt aber, wie ich die Summanden am Ende der Schleife addiere, um auf die Quersumme zu kommen. Wie mache ich das denn? Und das mit der Multiplikation von (-1) hab ich auch nocht nicht ganz begriffen...hoffe ihr könnt mir helfen.
Wo willst du's denn prüfen?
Die Prüfung macht nur Sinn _vor_ der Schleife (danach ist's müllig, währenddessen kriegst du abwechselnd einen Positiven und einen negativen Wert den du addierst oder so - je nach Position), Im Prinzip gehört die prüfung hinter die Eingabe, aber in deinem Fall ist die Eingabe die deklaration von q, also wäre vor beginn der schleife und nach der deklaration von q zu prüfen wie q aussieht und ggf. der Betrag zu bilden.
« Zahl1 größer kleiner als Zahl2, oder gleich groß? | VB 2008 express: größer kleiner gleich null ?? » | ||