2010-06-27 2 views
2

Мне нужно разбить суммы на их счету/монете.C программирование - ломание денег

Выход примерно так:

До сих пор, вот мой код: (я сделал последние несколько кодов комментарий один «сов ошибок оттуда)

{ 
    int x,y; 

    printf("Enter input: "); 
    scanf("%d",&x); 

    y=x/1000; 
    printf("\n# of $1000 bill: %d",y); 
    x = x%1000; 

    y=x/500;  
    printf("\n# of 4500 bill: %d",y);  
    x = (x%500); 

    y=x/200; 
    printf("\n#. of $200 bill: %d",y);  
    x = (x%200); 

    y=x/100; 
    printf("\n# of $100 bill: %d",y);  
    x = (x%100); 

    y=x/50; 
    printf("\n# of $50 bill: %d",y);  
    x = (x%50); 

    y=x/20; 
    printf("\n# of $20 bill: %d",y);  
    x = (x%20); 

    y=x/10; 
    printf("\n#. of $10 coin: %d",y);  
    x = (x%10); 

    y=x/5; 
    printf("\n#. of $5 coin: %d",y);  
    x = (x%5); 

    y=x/1; 
    printf("\n# of $1 coin: %d",y);  
    x = (x%1); 


    getch(); 
    return 0; 
    } 

I надеюсь, ты поможешь мне в этом. :/

Спасибо!

+0

является это домашнее задание? – Axarydax

+4

так в чем была проблема? – oadams

+0

да есть. проблема в том, что она не работает на части цента. – rob2k8

ответ

6

Это простая эвристическая проблема. У вас уже есть правильная идея. Для начала, если вы хотите использовать int (и это, вероятно, хорошая идея в вашем случае, чтобы избежать головных болей fp-точности и необходимость использования отдельного fmod), вам придется масштабировать ввод с плавающей запятой и ваш модуль/делители на 100. Кроме того, чтобы сократить избыточность, рассмотреть возможность использования функции как:

// returns number of units and subtracts unit_size * result 
// from val 
int units(int* val, int unit_size) 
{ 
    int num = *val/unit_size; 
    *val %= unit_size; 
    return num; 
} 

printf("No. of P1000 bill: %d\n",units(&x, 1000 * 100)); 
printf("No. of P500 bill: %d\n",units(&x, 500 * 100)); 
printf("No. of P200 bill: %d\n",units(&x, 200 * 100)); 
etc. 

Это должен сократить избыточный код немного. Может быть, не стоит слишком задумываться об этом, и я подозреваю, что это домашнее задание. Комплексное решение:

// returns number of units and subtracts unit_size * result 
// from val 
int units(int* val, int unit_size) 
{ 
    int num = *val/unit_size; 
    *val %= unit_size; 
    return num; 
} 

int main() 
{ 
    printf("Enter input: "); 

    float amount; 
    scanf("%f",&amount); 
    int x = (int)(amount * 100.0 + 0.5); 

    printf("No. of P1000 bill: %d\n", units(&x, 1000 * 100)); 
    printf("No. of P500 bill: %d\n", units(&x, 500 * 100)); 
    printf("No. of P200 bill: %d\n", units(&x, 200 * 100)); 
    printf("No. of P100 bill: %d\n", units(&x, 100 * 100)); 
    printf("No. of P50 bill: %d\n", units(&x, 50 * 100)); 
    printf("No. of P20 bill: %d\n", units(&x, 20 * 100)); 
    printf("No. of P10 coin: %d\n", units(&x, 10 * 100)); 
    printf("No. of P5 coin: %d\n", units(&x, 10 * 100)); 
    printf("No. of P1 coin: %d\n", units(&x, 1 * 100)); 
    printf("No. of 25 cents: %d\n", units(&x, 25)); 
    printf("No. of 1 cent: %d\n", units(&x, 1)); 

    return 0; 
} 

[Редактировать] Если у вас есть проблемы с пониманием указателей, а затем просто сделать это так, как вы написали без использования функции единиц, но изменить его соответствующим образом, чтобы читать в поплавком и умножить на 100, как в примере выше.

[Редактировать] Запрос:

int main() 
{ 
    printf("Enter input: "); 

    float amount; 
    scanf("%f",&amount); 
    int x = (int)(amount * 100.0 + 0.5); // x stores the user input in cents 

    int y = x/100000; // 1000 dollars is 100,000 cents 
    printf("\nNo. of P1000 bill: %d",y); 
    x = x % 100000; 

    ... 

    y=x/25; // we're working with cents, so 25 = 25 cents 
    printf("\nNo. of 25 cents: %d",y);  
    x = (x % 25); 

    ... 
} 
+0

+1 Хороший ответ ... Но измените указатель на ссылку, чтобы сделать его опрятным ... (или переместите% из функции) – Betamoo

+0

Название и код предполагают, что он использует C вместо C++, поэтому я избегал ссылок в этом случае. – stinky472

+0

У этого есть тег C++ ... в любом случае вы можете просто переместить% из функции ... он/она кажется новичком и может быть смущен указателями. – Betamoo

2

Scan значения пользователя в float, затем разделить доллары и центы на два int значения.

монеты, необходимая для значения центов должна быть затем очень легко вычислить, используя тот же метод, который вы уже использовали (кроме деления/мод на 25 на 25 центов, 1 за 1 цент и т.д.)

+0

oho, многие проблемы поставляются с кодом с использованием float (проблемы округления). Я бы не советовал кому-либо это сделать, а использовать целые числа. * 100. – jdehaan

+0

Я только рекомендую получать вход пользователя с помощью поплавка. Оттуда все вычисления выполняются по ints. Наивысший рейтинг в этой теме также получает значение пользователя в поплавок. Почему его штраф, а мой нет? – MatthewD

+0

Мэтью, я должен признаться, что неправильно понял ответ, прочитав его слишком быстро. Но только для вашей информации я не опустил вас. Я дам вам взнос, как только я получу несколько голосов (значит завтра). Не сдавайся, получая понижающие голоса, иногда обескураживает, я знаю это по собственному опыту, мне пришлось учиться не слишком лично. Продолжайте, и вы добьетесь успеха! :-) Иногда люди оказываются под влиянием комментариев ниже ответа, возможно, я косвенно отвечаю за -1, извините ... – jdehaan

Смежные вопросы