Wie zählt man die Stellen einer Integer-Zahl?



  • Guten Abend,

    ich möchte gerne in einem Programm die einzelnen Ziffern einer eingegebenen Zahl durchgehen und verarbeiten. Ich könnte die Integer ja in ein char-Array umwandeln, aber ich wollte es gerne anders lösen. Ein Freund hat mir schon beim ersten Schritt geholfen, und zwar:

    int bla1 = 1234567890;
      cout << (bla1/1%10) << endl                 //10. Stelle
           << (bla1/10%10) << endl                //9. Stelle
           << (bla1/100%10) << endl               //8. Stelle
           << (bla1/1000%10) << endl              //7. Stelle
           << (bla1/10000%10) << endl             //6. Stelle
           << (bla1/100000%10) << endl            //5. Stelle
           << (bla1/1000000%10) << endl           //4. Stelle
           << (bla1/10000000%10) << endl          //3. Stelle
           << (bla1/100000000%10) << endl         //2. Stelle
           << (bla1/1000000000%10) << endl;       //1. Stelle
    

    Für diese Lösung müsste ich aber wissen, wie viele Ziffern die Integer hat. Habe schon nach size auf cppreference.com gesucht, aber nichts passendes gefunden. Habe es mit sizeof versucht, aber das gibt mir nur die Größe der Bytes der Integer wieder - also 4 Byte.

    Habe auch schon bei Google gesucht (1, 2), aber bin nicht wirklich zum Ziel gekommen.

    Könnt ihr mir helfen? 🙂
    Danke



  • die anzahl der stellen bekommst du imho am einfachsten raus, wenn du die zahl in einen string wandelst und die zahl der buchstaben zählst. Also, FAQ einmal zahl nach string und zurück, dir was aussuchen (oder boost::lexical_cast nehmen) und dann string::size() aufrufen. dann bekommst du die anzahl der stellen relativ leicht raus.

    Oder du schreibst dir eine schleife die eine zahl nach zehnerpotenzen erhöht ungd guckst immer, wie lange deine zahl größergleich dieser zahl ist. damit kannst die stellen auch berechnen.



  • Oder auch log10(zahl), lässt sich glaube ich auch mit log(10)/log(zahl) ausdrücken - da hast du dann aber das Minus-Zeichen nicht drin.



  • Ja, das sind gute Ideen. Aber ich wollte gerne bei Integer bleiben. Ich werde also die zweite Lösung nehmen.

    Ich hatte es mit einem eher seltsamen Konstrukt versucht. Ich weiß aber nicht, was ich mir dabei gedacht habe. Es sollte die Zahl durch 10 nehmen und prüfen ob sie kleiner als 10 ist. Hat aber nur zu einem sofortigen Abbruch des Programms geführt.

    while( (bla1 /= 10 % 10) > 0 )
        cout << bla1 << endl;
    

    Danke! 🙂



  • Bei der Zahl 200: 200/=10 -> 20 % 10 -> 0 :p



  • Von der Performance ist das sicher die schnellste Lösung: Durch 10 teilen bis nichts mehr übrig bleibt 😉



  • Muha! Es funktioniert sogar! 😃 Mein erster Ansatz war etwas falsch. Danke! 🙂

    while( (int) bla1 /= 10 ) cout << bla1 << endl;
    

Log in to reply