böse 7



  • Naja, es geht auch ohne Umwandlung in einen String. Hab mir da folgende Formel überlegt:

    Sei z die Zahl, deren i-te Stelle gesucht ist
    Sei n die Anzahl Ziffern von z
    Dann bekommt man die i-te Ziffer durch:
    (z / 10^(n-i)) % 10

    Dazu ein kleines Programm:

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int getNumber(unsigned int number, unsigned int length, int index) {
       return (int)(number / pow(10.0, (length-(double)index))) % 10;
    }
    
    int main() {
       int zahl = 45689231;
       for(int i=1; i < 9; i++)
          cout << i << ".te Stelle von " << zahl << " = " << getNumber(zahl, 8, i) << endl;
       cin >> i;
       return 0;
    }
    

    Nicht sehr hilfreich, aber mir war grad langweilig 😉



  • 1.ne möglichkeit ist, die quersumme so zu ermitteln wie das jeder normalbürger machen würde (naja man zählt zwar nicht jeden 100er und 10er einzeln, aber in dem fall macht das weniger umstände)

    int quersumme(int z)
    {
    int qs=0, h=z;// h(ilf) verhindert das du z selbst veränderst
    while (h>=100)
    {h=h-100;
    ++qs;
    }
    while(h>=10)
    {h=h-10;
    ++qs;
    }
    qs=qs+h;/* jetzt müsste nur noch die letzte ziffer übrig sein, also ist es einfacher direkt zu addieren*/
    return qs;
    }
    

    solltest du auch noch die quersumme der quersumme brauchen kannst du die funktion doppelt laufen lassen



  • Ich würde es etwas anders lösen. Die while-Schleifen sehen zwar gut aus nur bei größeren Zahlen geht es schief und muß erweitert werden 10tausender 100tausender ...

    #include <iostream>
    #include <math.h>
    
    using namespace std; 
    
    inline int zehn_hoch(int i)
    {	
    	int k=1;
    	for(i;i>0;--i)
    		k*=10;
    	return k;
    }
    
    int main ()
    {
    int qs=0, zahl;
    cout<<"Eingabe: ";
    cin>>zahl;
    for(int exp=log10(zahl);exp>=0; --exp)
    {	
    	int tmp=zahl/zehn_hoch(exp);
    	zahl%=zehn_hoch(exp);
    	qs+=tmp;
    }
    
    cout<<qs<<endl;
    return 0; 
    }
    

    Gruss


Anmelden zum Antworten