Problem mit modulo

Status
Nicht offen für weitere Antworten.

anfänger07

Neues Mitglied
Hi erstmal,
ich habe folgendes Problem...ich bin gerade dabei java zu lernen und habe mir ein paar aufgaben aus dem inet gefischt. dabei macht mir diese aufgabe probleme:

Quelle: Aufgabenblatt4
--------
Aufgabe 2: Binärzahlen (4 Punkte)

Die binäre Darstellung einer natürlichen Zahl n>=0 kann als Zahlenmenge interpretiert werden. Das Element i ist in der Menge enthalten, wenn das Bit an der Stelle i gesetzt ist (wobei die Zählung von hinten bei 0 beginnt).
Die Zahl 44 lautet zum Beispiel binär: 101100b (das tiefgestellte b steht für binär) und entspricht der Menge {2, 3, 5}.
Hinweis: Sie können die jeweils letzte Binärziffer einer Zahl n durch n/2 abspalten bzw. mit n%2 prüfen, ob sie 0 oder 1 ist. So gilt: 1110b / 2 = 111b und 1110b % 2 = 0

3. Schreiben Sie eine Methode, die eine int-Zahl in der Mengendarstellung (z.B. {2, 3, 5}) ausgibt (mit System.out.print und System.out.println).
----
da ich ja immer die zahl % 2 "dividiere und nicht weiß,wie groß vorher die zahl ist, müsse man doch eine schleife anwenden...
jetzt meine frage,wie müsste die dazugehörige schleife aussehen?
bin euch wirklich sehr sehr dankbar!
 
Achhh... Schleifen stinken eh^^
Java:
import javax.swing.*;
import java.util.*;
import static java.lang.System.*;

public class _ {
	
	private static LinkedList<Integer> rec(int n, int digit){
		if(n==0){
			return new LinkedList<Integer>();
		}else{
			LinkedList<Integer> result=rec(n/2,digit+1);
			if(n%2==1) result.addFirst(digit);
			return result;
		}
	}
	
	public static Collection<Integer> intToStrangeSet(int n){
		return rec(n,0);
	}
	
	public static String writeInCurlyBrackets(Collection<?> c){
		StringBuilder s=new StringBuilder("{");
		for(Object o:c) s.append(o.toString()+",");
		s.setCharAt(s.length()-1,'}');
		return s.toString();
	}
	
	public static void sayBlah(int n){
		out.println(writeInCurlyBrackets(intToStrangeSet(n)));
	}
	
	public static void main(String[] args){
		sayBlah(44);
	}
}
:gaen::gaen::gaen:
 
Zuletzt bearbeitet:
Wie soll dass denn ein anfänger verstehen? ???:L


Edit: Damit das nicht ganz gespammt aussieht^^


Sag mal : wie hasst du denn aufgabe 1 gelösst , ohne modulo?
Wenn du mit modulo probleme hast?

Weil da musst du ja auch irgendwie : prim = a%2 haben.

if(prim !=0)
...primzahl.


naja vielleicht gibst auch wieder ne lösung , von der ich nichts weiß^^
 
Zuletzt bearbeitet:
Wie soll dass denn ein anfänger verstehen? ???:L
Notfalls:
  • durchlesen
  • nachvollziehen
  • nachprogrammieren

Eigentlich:
  • bleistift nehmen
  • selber nachdenken
  • implementieren
  • vergleichen und erfreut feststellen, dass die Lösung sehr ähnlich aussieht
  • oder: vergleichen, und sich drüber freuen, dass es alternative Lösungen gibt
 
danke erstmal für die antworten...allerdings will ich das so leicht wie möglich haben.

habe das so in etwa:
while (x > 0) {

if (x % 2 == 1) {

if (first) first = false; else Out.print(',');

Out.print(pos);


allerdings ist mein problem die mengendarstellung. sprich ich will ausgegeben haben,wann der rest eins ist bzw. die menge annimmt.

da brauche ich dann eine art counter, nur weiß ich leider nicht,wie ich den nebenbei einfach mitlaufen lasse...allerdings müsste doch eine schleife reichen oder?

sprich:
dividiere meine zahl durch 2 (modulo) solange bis der wert kleiner eins ist....
dann haben wir die binärdarstellung. wie kann ich jetzt einen counter die position der werte (einsen) nebenbei schon abzählen lassen und ausgeben? nochmal vielmals danke...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben