Hey mit folgender Schleife kann ich alle Zahlen von 0 bis 199 ausgeben Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei 0 asugeben, und bei zweistelligen eine oder zwei. Wie bekomm ich dies mit möglichst wenig Code hin? for (c = 0; c < 200; c++) { cout << c << endl; }
Das klingt sehr nach einer Hausaufgabe. Wie würdest du es denn lösen? Dann kann man dir Tipps geben, was man besser machen kann. Alex schrieb: > Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei > 0 asugeben, und bei zweistelligen eine oder zwei. Und bei dreistelligen?
Nimm printf, damit geht alles viel einfacher, kürzer und lesbarer als mit diesen verkorksten Streams.
Demnächst wird aber alles sehr viel besser ;) https://www.heise.de/developer/artikel/std-format-in-C-20-4919132.html Oliver
Alex schrieb: > mit folgender Schleife kann ich alle Zahlen von 0 bis 199 ausgeben > Ich möchte nun bei einstelligen Zahlen abwechselnd keine, eine oder zwei > 0 asugeben, und bei zweistelligen eine oder zwei. Wie bekomm ich dies > mit möglichst wenig Code hin?
1 | for (c = 0; c < 200; c++) |
2 | printf("%.3d\n", c); |
Mit C++ < 20 und ohne printf ist es tatsächlich etwas blöd:
1 | for(c = 0; c < 200; c++) |
2 | std::cout << std::setw(3) << std::setfill('0') << c << std::endl; |
Mit C++20:
1 | for(c = 0; c < 200; c++) |
2 | std::cout << std::format("{:03}\n", c); |
BTW: Ich bin mir aber nicht sicher, ob du das überhaupt meinst. "bei einstelligen Zahlen abwechselnd keine, eine oder zwei 0 ausgeben" wäre ja so etwas:
1 | 1 |
2 | 02 |
3 | 003 |
4 | 4 |
5 | 05 |
6 | 006 |
7 | 7 |
8 | 08 |
9 | 009 |
... und "bei zweistelligen eine oder zwei" kommt mir auch nicht plausibel vor. Eher bei zweistelligen keine oder eine. Vielleicht doch besser gleich die Aufgabe scannen und hier reinstellen?
:
Bearbeitet durch User
Alex schrieb: > for (c = 0; c < 200; c++) { > cout << c << endl; > } Alex schrieb: > Wie bekomm ich dies > mit möglichst wenig Code hin? Eine Zeile einfügen :)
1 | for (int c = 0; c < 200; c++) { |
2 | for (int i=0; i<c%(3-(c>9))-(c>99); ++i) cout << '0'; |
3 | cout << c << endl; |
4 | }
|
Fängt wie in deiner Vorgabe bei "0" an, erste Werte:
1 | 0 |
2 | 01 |
3 | 002 |
4 | 3 |
5 | 04 |
6 | 005 |
7 | 6 |
8 | 07 |
9 | 008 |
10 | 9 |
11 | 10 |
12 | 011 |
13 | 12 |
14 | 013 |
15 | 14 |
16 | 015 |
17 | 16 |
18 | 017 |
19 | 18 |
20 | 019 |
21 | ... |
Oder alternativ mit einer Schleife:
1 | std::cout << std::setfill('0'); |
2 | for(int c = 0; c < 200; c++) |
3 | {
|
4 | std::cout << std::setw(c < 10 ? c % 3 + 1 : c % 2 + 2) << c << std::endl; |
5 | }
|
is natürlich extrem witzig, den TO so vorzuführen. Er meint sicher was anderes. "abwechselnd eine oder mehrere nullen" steht da aber. Muss er wohl durch. (schmunzel)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.