2016-11-13 1 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

«есть плюс в одной из сторон ». Ну, вы написали '<<" + ";'. Чего ты ожидал? – MSalters

ответ

0

Проблема

Проблема заключается в том, что вы всегда выводить «+» в конце любой монеты (за исключением последнего), не зная, если что-то будет следовать или нет.

Например, с количеством 20, следующее условие будет получить срабатывает:

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

Но нет никакого остатка, ничего не будет напечатано, оставляя вам концовку прицеп.

Как это решить?

Везде вы в настоящее время написать Продольный «+», вы должны изменить свой код и сделать это только в том случае, если был бы 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; 
Смежные вопросы