Hallo,
ich habe mit Java vor 4 Wochen angefangen und komme bei einer Übungsaufgabe nicht weiter.
Man stelle sich ein Schachbrett vor und auf das erste der 64 Felder des Schachbretts wird ein Weizenkorn gelegt, auf das zweite zwei, auf das dritte vier usw.
Auf das nächste Feld kommt immer die doppelte Anzahl von Körnern.
Maximal gibt es 2^63 Körner.
Der größte Datentyp in Java,den ich bis jetzt gelernt habe ist long.
Allerdings geht bei long genau da der Speicher aus,denn da sind nur 2^63-1 möglich.
Also muss man sich was ausdenken.
Mein Ansatz:
Man nehme ein Array,welches 19 Stellen lang ist.
Jedes Feldelement stellt eine Ziffern dar, addiert wird Ziffernweise mit Übertrag.
So weit so gut,mein bisher geschriebener Code:
Für die ersten vier Felder scheints richtig zu sein,ab dem fünften ist es falsch.
Nun meine Frage,ob ich mit dem Ansatz auf dem richtigem Weg bin und wo ich nochmal ansetzen muss.
Gesucht nach diesem Problem habe ich bereits.
Gestoßen bin ich auf Lösungen mit big integer (kenn ich noch nicht und darf ich so nicht benutzen) und arrays mit int und string,die ich aber nicht nachvollziehen kann (zumal ich inttostr bzw. strtoint auch noch nicht kenne und nicht benutzen darf).
Danke für's Lesen!
ich habe mit Java vor 4 Wochen angefangen und komme bei einer Übungsaufgabe nicht weiter.
Man stelle sich ein Schachbrett vor und auf das erste der 64 Felder des Schachbretts wird ein Weizenkorn gelegt, auf das zweite zwei, auf das dritte vier usw.
Auf das nächste Feld kommt immer die doppelte Anzahl von Körnern.
Maximal gibt es 2^63 Körner.
Der größte Datentyp in Java,den ich bis jetzt gelernt habe ist long.
Allerdings geht bei long genau da der Speicher aus,denn da sind nur 2^63-1 möglich.
Also muss man sich was ausdenken.
Mein Ansatz:
Man nehme ein Array,welches 19 Stellen lang ist.
Jedes Feldelement stellt eine Ziffern dar, addiert wird Ziffernweise mit Übertrag.
So weit so gut,mein bisher geschriebener Code:
Java:
public static void main(String args[])
{
int [] langzahl = new int [19];
int laengeZahl;
laengeZahl = langzahl.length;
langzahl[laengeZahl-1] = 1;
for (int i = 2; i < 64; i++)
{
System.out.println("\nFeld: " + i);
addieren(langzahl);
}
}
public static void addieren(int[] zahl1)
{
int ziffer1, ziffer2, tempZiffer, ziffersumme, uebertrag;
int[] koerner = new int[19];
int[] zahl2 = new int[19];
uebertrag = 0;
//Weizenkörner bzw. Zahl2 bestimmten; Zahl 2 ist das Doppelte wie Zahl 1
for (int i = zahl1.length-1; i >= 0; i--)
{
ziffer1 = zahl2[i];
tempZiffer = 2 * zahl1[i];
if (ziffer1 + tempZiffer + uebertrag > 10)
{
ziffersumme = (ziffer1 + tempZiffer + uebertrag) / 10;
uebertrag = 1;
//zahl2[i] = ziffersumme;
zahl1[i] = ziffersumme;
}
else if (tempZiffer + ziffer1 + uebertrag == 10)
{
ziffersumme = 0;
uebertrag = 1;
//zahl2[i] = ziffersumme;
zahl1[i] = ziffersumme;
}
else
{
ziffersumme = ziffer1 + tempZiffer + uebertrag;
uebertrag = 0;
//zahl2[i] = ziffersumme;
zahl1[i] = ziffersumme;
}
}
// Zahl 2 bzw. Weizenkörneranzahl ausgeben
System.out.println("Weizenkörner : ");
for (int j = 0; j < zahl1.length; j++)
System.out.print(zahl1[j]);
}
Für die ersten vier Felder scheints richtig zu sein,ab dem fünften ist es falsch.
Nun meine Frage,ob ich mit dem Ansatz auf dem richtigem Weg bin und wo ich nochmal ansetzen muss.
Gesucht nach diesem Problem habe ich bereits.
Gestoßen bin ich auf Lösungen mit big integer (kenn ich noch nicht und darf ich so nicht benutzen) und arrays mit int und string,die ich aber nicht nachvollziehen kann (zumal ich inttostr bzw. strtoint auch noch nicht kenne und nicht benutzen darf).
Danke für's Lesen!