[gelöst] schriftliche Addition von 2 Zahlen im QString

Verschiedenes zu Qt
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

[gelöst] schriftliche Addition von 2 Zahlen im QString

Beitrag von 24dan »

Hallo ich habe mir eine Funktion zur Schriftlichen Addition geschrieben.
Hat jemand eine Tip ob man das auch noch schneller hinbekommt?
PS: Es müssen die Zahlen 1 und 2 als QString eingegeben werden da die einfach über den größt möglichen Datentyp hinausreichen.

Code: Alles auswählen

QString TEIL::add2Zahlen(QString zahl1, QString zahl2)
{
    int ziff1 = 0;
    int ziff2 = 0;
    int sum = 0;
    int merk = 0;
    QString erg, teilerg;
    bool ok;
    do{

        // Schön immer alles reseten für die Addition
        ziff1 = 0;
        ziff2 = 0;
        sum = 0;

        // Zahl1, Stellenweise zerlegen
        if(!zahl1.isEmpty()){
            ziff1 = zahl1.right(1).toInt(&ok, 10);
            zahl1.chop(1);
        }

        // Zahl2, Stellenweise zerlegen
        if(!zahl2.isEmpty()){
            ziff2 = zahl2.right(1).toInt(&ok, 10);
            zahl2.chop(1);
        }
        // Eigentliche Addition + Übertrag
        sum = ziff1 + ziff2 + merk;

        if(sum != 0){
            // Summe 1- oder 2- stellig ?
            teilerg = QString::number(sum);
            // Zehnerstelle merken
            if(sum > 9) merk = teilerg.left(1).toInt(&ok,10);
            else merk = 0;

            // Einer als Teilergebnis
            erg.prepend(teilerg.right(1));
        }
    }while(sum != 0);

    return erg;
}
8)
Zuletzt geändert von 24dan am 26. Mai 2010 23:03, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Schön, nimm doch einfach mal meine Funktion und mess mal die Zeit dagegen.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Ups ....
da hab ich wohl was verblitzdings bekommen.

Genau ein ähnliches Problem hatten wir ja schon...

Also im Gegensatz zu meiner jetzigen Lösung bei der mir noch ein Fehler die Funktion unbrauchbar macht ist die von Dir
nutzbar und ich brauche hier auch keine Timing Probleme zu beachten da wo ich die einsetze ist die schnell genug.

Code: Alles auswählen


QString add(QString z1, QString z2) {
   QString result;
   const int l=qMax(z1.size(), z2.size());
   z1=z1.rightJustified(l, '0');
   z2=z2.rightJustified(l, '0');
   int wert=0;
   for (int pos=l-1; pos>=0; pos--) {
      wert+=z1.at(pos).digitValue()+z2.at(pos).digitValue();
      result=QString::number(wert%10)+result;
      wert/=10;
   }
   if (l==0 || wert>0) {
      result=QString::number(wert%10)+result;
   }
      
   return result;
} 
VIELEN DANK....

:wink:
  • zahl: "11" + "" = "11"
    zahl: "2" + "11" = "13"
    zahl: "3" + "13" = "16"
    zahl: "444444444444" + "16" = "444444444460"
    zahl: "55555555555555555555" + "444444444460" = "55555556000000000015"
    zahl: "66666666" + "55555556000000000015" = "55555556000066666681"
    zahl: "7777" + "55555556000066666681" = "55555556000066674458"
    zahl: "88888" + "55555556000066674458" = "55555556000066763346"
    zahl: "99999999999999" + "55555556000066763346" = "55555656000066763345"
    zahl: "33" + "55555656000066763345" = "55555656000066763378"
    zahl: "4" + "55555656000066763378" = "55555656000066763382"
    zahl: "5555555555555555" + "55555656000066763382" = "55561211555622318937"
    zahl: "6" + "55561211555622318937" = "55561211555622318943"
    zahl: "9999999999" + "55561211555622318943" = "55561211565622318942"
    zahl: "111111" + "55561211565622318942" = "55561211565622430053"
    zahl: "222222" + "55561211565622430053" = "55561211565622652275"
    zahl: "33333333333333" + "55561211565622652275" = "55561244898955985608"
    zahl: "4444" + "55561244898955985608" = "55561244898955990052"
    zahl: "5" + "55561244898955990052" = "55561244898955990057"
    zahl: "8888" + "55561244898955990057" = "55561244898955998945"
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten