2016-11-13 1 views
-2

Ich habe ein einfaches Programm, in dem Sie einen Wert in einer (bulgarischen) Währung eingeben und Ihnen den auf die wirtschaftlichste Weise aufgeteilten Betrag in Banknoten anzeigen. Zum Beispiel für einen Betrag von 91, soll es 1*50 + 2*20 + 1Das abschließende Pluszeichen in einer Mengenzerlegung kann nicht entfernt werden

Nun druckt, ist das Problem, dass bei der Eingabe einer kleine Menge wie 20 beispielsweise in der Ausgabe gibt es eine Hinter „+“ am Ende (zB 1*20 + statt 1*20). Ich würde gerne wissen, wie man die Nummer nicht ausgibt, wenn sie alleine ist. Levove ist die bulgarische Währungseinheit.

#include <iostream> 
using namespace std; 

int main() 
{ 
    unsigned int Amount; 
    cout << "Enter the amount of levove: "; 
    cin >> Amount; 
    unsigned int Fifty = 50; 
    unsigned int Twenty = 20; 
    unsigned int Ten = 10; 
    unsigned int Five = 5; 
    unsigned int Two = 2; 
    unsigned int One = 1; 
    unsigned int Levove = Amount; 

    cout << Suma << " = "; 

    if (Levove/Fifty == 0) 
    { 
    } 
    else 
     if (Levove/Fifty == 1) 
    { 
     cout << Levove/Fifty << "*" << Fifty << "+"; 
    } 
    else 
    { 
     cout << Levove/Fifty << "*" << Fifty << "+"; 
    } 
     Levove %= Fifty; 

    if (Levove/Twenty == 0) 
    { 
    } 
    else if (Levove/Twenty == 1) 
    { 
     cout << Levove/Twenty << "*" << Twenty << "+"; 
    } 
    else 
    { 
     cout << Levove/Twenty << "*" << Twenty << "+"; 
    } 
     Levove %= Twenty; 


    if (Levove/Ten == 0) 
    { 
    } 
    else if (Levove/Ten == 1) 
    { 
     cout << Levove/Ten << "*" << Ten << "+"; 
    } 
    else 
    { 
     cout << Levove/Ten << "*" << Ten << "+"; 
    } 
     Levove %= Ten; 


    if (Levove/Five == 0) 
    { 
    } 
    else if (Levove/Five == 1) 
    { 
     cout << Levove/Five << "*" << Five << "+"; 
    } 
    else 
    { 
     cout << Levove/Five << "*" << Five << "+"; 
    } 
     Levove %= Five; 

    if (Levove/Two == 0) 
    { 
    } 
    else if (Levove/Two == 1) 
    { 
     cout << Levove/Two << "*" << Two << "+"; 
    } 
    else 
    { 
     cout << Levove/Two << "*" << Two << "+"; 
    } 
     Levove %= Two; 


    if (Levove/One == 0) 
    { 
    } 
    else if (Levove/One == 1) 
    { 
     cout << Levove/One << "*" << One; 
    } 
    else 
    { 
     cout << Levove/One << "*" << One; 
    } 
     Levove %= One; 


    return 0; 
} 
+1

„gibt es ein Plus in einer der Seiten ". Nun, du schreibst "<<" + ";". Was hast du erwartet? – MSalters

Antwort

0

Das Problem

Das Problem ist, dass Sie immer ein „+“ am Ende jeder Münze (mit Ausnahme der letzten) ausgegeben, ohne zu wissen, ob etwas folgen oder nicht.

Zum Beispiel mit einer Menge von 20, würde die folgende Bedingung ausgelöst werden:

... 
else if (Levove/Twenty == 1) 
{ 
    cout << Levove/Twenty << "*" << Twenty << "+"; 
} 
... 

Aber kein Rest ist, sonst nichts gedruckt wird, erhalten Sie einen endet Anhänger zu verlassen.

Wie löst man es?

Überall, wo Sie derzeit schreiben ein „+“ trailing, sollten Sie Ihren Code ändern und dies nur geschehen, wenn es ein remainer würde:

... 
if (Levove/Twenty != 0) // also think of simplifying the ifs 
{ 
    cout << Levove/Twenty << "*" << Twenty ; 
    Levove %= Twenty; // this is only needed if Lenove/Twenty is not null. 
    if (Levove != 0) 
     cout <<" + "; 
} 

By the way, Sie auch Ihre if .. else if .. else vereinfachen könnte Konstrukte

Zusätzliche Bemerkungen

auf den Code der Suche, ich denke, Sie lernen. Wenn Sie bereits gelernt haben, wie eine Funktion zu tun, würde ich empfehlen Ihnen die wiederholte Teilnahme an einer Funktion setzen:

unsigned int amount_to_coins (unsigned int amount, unsigned int coin_value) { 
    unsigned int coins=amount/coin_value; 
    if (coins) 
    { 
     cout << coins << "*" << coin_value ; 
     amount %= coin_value; 
     if (amount) 
      cout <<" + "; 
    } 
    return amount; 
} 

Ihre main() Funktion würde dann leichter zu lesen:

Levove = amount_to_coins (Levove, Fifty); 
Levove = amount_to_coins (Levove, Twenty); 
... 
Levove = amount_to_coins (Levove, One); 
cout <<endl; 

if (Levove !=0) 
    cout << "Now there must be a bug somewhere !"<<endl; 
Verwandte Themen