Forum: PC-Programmierung Leading Zeros in c++


von Alex (Gast)


Lesenswert?

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;
}

von hey (Gast)


Lesenswert?

Hey du müsstest den Code erweeitern

von Rolf M. (rmagnus)


Lesenswert?

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?

von AmAstKlebtUhu (Gast)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Nimm printf, damit geht alles viel einfacher, kürzer und lesbarer als 
mit diesen verkorksten Streams.

von Oliver S. (oliverso)


Lesenswert?

Demnächst wird aber alles sehr viel besser ;)

https://www.heise.de/developer/artikel/std-format-in-C-20-4919132.html

Oliver

von udok (Gast)


Lesenswert?

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);

von Dings vom Dach (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

... 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
von Εrnst B. (ernst)


Lesenswert?

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
...

von Dings vom Dach (Gast)


Lesenswert?

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
}

von Axel R. (axlr)


Lesenswert?

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
Noch kein Account? Hier anmelden.