2016-11-13 2 views
-2

私は、(ブルガリア)通貨で値を入力し、最も経済的な方法で紙幣の金額を表示する簡単なプログラムを持っています。例えば91の量のために、それは1*50 + 2*20 + 1金額の分解で末尾のプラス記号を取り除くことができません

まあを印刷する必要があり、問題はあなたが例えば入力20のような小さな量は出力の末尾に「+」は終わりがある場合ということである(例えば1*20 +の代わりに、 1*20)。もしそれが単なるものであれば、数字を出力しない方法を知りたいです。 Levoveはブルガリアの通貨単位です。

#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

「があります側面の1つにプラスがあります "。あなたは '<<" + ";'と書いています。あなたは何を期待しましたか? – MSalters

答えて

0

問題

問題は何かが続くかない場合は知らなくても(最後のものを除く)任意のコインの最後にある「+」、あなたは常に出力されます。

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

をしかし、余りがないで、他には何もあなたに終わるトレーラーを残して、印刷されません。

は、例えば、20の量を、以下の条件がトリガーになるだろう。

解決方法あなたが現在「+」末尾の書き込み

どこでも、あなたのコードを変更し、これはremainerがあるだろう場合にのみ起こるようにする必要があります

... 
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 <<" + "; 
} 

ところで、あなたもあなたのif .. else if .. elseを簡素化することができあなたのコードを見てみると

追加発言

を構築し、私はあなたが学んでいると思います。すでに機能を行う方法を学んできた場合、私は非常にあなたが関数内で繰り返し部分を置く推薦する:

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; 
} 

あなたmain()機能は、読みやすくなる:

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; 
関連する問題