Anfängerhilfe für Zahlenprobleme
-
Hallo,
Ich hoffe ich bin hier im richtigen Froum. Ich beginne gerade in C++ zu programmieren und habe ein paar Aufgaben zu lösen, darunter einige bei denen ich eine Zahl einlesen soll und dann mit den einzelnen Ziffern weiterarbeiten soll. Hier ein Beispiel:
Schreiben Sie ein Programm, das zwei Zahlen m und n einliest und die n-te Ziffer der Zahl m ausgibt
z.B. m=1358 n=2 Ausgabe: 5Ich habe in den letzten Tagen viel in Google gesucht und nichts gefunden. Bitte helft mir.
mfg, thepreprocessor
-
Hallo
Du kannst die Zahl doch als string einlesen und dann auf die eingegebene Position zugreifen.
chrische
-
Bei dem Bsp wäre das möglich, aber wenn ich mit den Zahlen weiterarbeiten will (Rechnen usw.) kann ich sie nicht als string einlesen (oder wenn doch wie kann ich sie umwandeln?)
Schreiben Sie ein Programm, das eine dreistellige Zahl einliest und mit Hilfe der Ziffernsumme überprüft, ob die eingegebene Zahl durch 3 teilbar ist.
-
Hallo
Du kannst die Zahl bzw. den string casten.
chrische
-
Ich hab das jetzt mal ausprobiert.
int k; string a = "1234"; k = (int) a[2];Wenn ich jetzt die 2. Stelle (3) in einen Integer umwandle bekomme ich die Zahl 51. (Ich nehme an dass ist der ASCII Code). Gibt es keinen direkten Weg das umzuwandeln?
-
String nach Integer:
atoi, atol, strtol
sscanf (Böse! Vergiss am besten dass es die Funktion gibt :))
STL streams (operator >>)
boost::lexical_cast (verwendet STL streams)Der Vollständigkeit halber...
Integer nach String:itoa
sprintf
STL streams (operator <<)
boost::lexical_castIch denke aber es wäre sowieso das Beste wenn du den string zuerst nach Integer wandelst, und dann einfach (in einer Schleife) 'n' mal durch 10 dividierst. Dann ne Restlkassendivision durch 10 (operator
und du hast deine 'n-te Stelle von Rechts'.Sonst müsstest du z.B. noch sicherstellen dass der String wirklich auch mit der letzten Stelle der Zahl aufhört und nicht evtl. noch Leerzeichen oder sonstwas hinten dran hat.
Generell, wenn es eine Zahl ist mit der du arbeiten willst, dann arbeite auch als Zahl damit, und nicht als String.
Und was User-Input angeht: zuerst einlesen, dann validieren/parsen, dann erst damit arbeiten. Immer

-
oder ohne strings:
m = m % pow(10, n); m = m / pow(10, n-1);
-
Finger weg von Floating Point Arithmetik wenns um Integers bzw. exakte Berechnungen geht!