2017-03-15 3 views
0

Ich habe nur wenige Fragen zu Techniken, die das Arbeiten mit ganzen Zahlen und die gesamte Codierung betreffen.Beste Methoden beim Arbeiten mit ganzen Zahlen?

Zum Beispiel, wenn ich ganze Zahlen ändern oder überprüfen muss, speichere ich die Ziffern einer Zahl in einem Vektor und arbeite dann mit ihnen und dann wenn nötig zusammen, aber ich denke, es ist ein wenig unpraktisch.

Es gab eine Aufgabe, wo ich eine Funktion schreiben musste, die Nullen aus einer Ganzzahl entfernt und die gleiche Zahl ohne die Nullen zurückgibt.

int removeZeros(int n) { 
    std::vector<int> v; 

    while(n != 0) { 
     v.push_back(n%10); 
     n /= 10; 
    } 

    for(int i = 0; i < v.size(); i++) { 
     if(v[i] == 0) { 
      v.erase(v.begin() + i); 
      i--; 
     } 
    } 

    for(int i = v.size() - 1; i >= 0; i--) { 
     n *= 10; 
     n += v[i]; 
    } 
    return n; 
} 

Dieser Code funktioniert gut, aber ich bin mir nicht sicher, ob es gut, effizient geschrieben ist.

Denken Sie, dass die Methode diese Methode gut, effizient genug ist? Oder gibt es eine bessere, bequemere Möglichkeit, mit Ganzzahlen zu arbeiten (oder zu ändern)?

Können Sie mir irgendwelche Tipps geben, wie man ein effizienterer Codierer wird?

Dank

+0

Ich stimme für das Schließen dieser Frage als Off-Topic, weil Fragen zum Codierungsstil besser für CodeReview.stackexchange.com geeignet sind. – Barmar

Antwort

1

Sie können dies tun, überhaupt ohne vector s - nur Mathematik.

long int NoZeros(long int num) { 
    bool sign = num < 0; 

    long int ret = 0, running = 1; 
    while (num) { 
     if (num % 10) { 
      ret += running * (num % 10); 
      running *= 10; 
     } 
     num /= 10; 
    } 
    return sign?-num:num; 
} 
Verwandte Themen