Как перейти к следующей строке кода, если вычисляемая переменная не является целым числом - PullRequest
0 голосов
/ 16 февраля 2019

** ОБНОВЛЕНИЕ: Это было решено, Лок Тран!Спасибо, ЛокТран !!**

Я пишу программу (с использованием строго C), которая рассчитывает минимальное изменение в номиналах США.После того, как моя программа достигает десяти центов (первая деноминация, которая не делится на целое число, программа, похоже, не хочет переходить на никели и копейки.

Я попытался использовать оператор if, исключая значение dimesDue при возвратеноль, но, кажется, не могу понять. Если вы заметили, мне также пришлось сделать новую переменную изменения для каждого номинала, основываясь на вычете предыдущих номиналов из общей суммы изменения. Я бы предпочел упростить это и указать новыйзначение после каждого расчета, но не может.

// Amount Tendered and Purchase amount converted to pennies

amountDue = 2117;
amountGiven = 10000;

// Creating a new change amount for each denomination, based on each previous computation

change = amountGiven - amountDue;
change10s = change % (20 * 100);
change5s = change % (10 * 100);
change1s = change % (5 * 100);
changeQs = change % (1 * 100);
changeDs = change % 25; 
changeNs = change % 10;
changePs = change % 1;

// Using each new change amount to calculate amount of denomination 

twentiesDue = (change / 20) / 100;
tensDue = (change10s / 10) / 100;
fivesDue = (change5s / 5) / 100;
onesDue = (change1s / 1) / 100;
quartersDue = (changeQs / 25);
dimesDue = (changeDs / 10);
nickelsDue = (changeNs / 5);
penniesDue = (changePs / 1);

printf("Amount Due: $21.17\nAmount Tendered: $100\n\n");
printf("Change Due:\n(by denomination)\n");
printf("Twenties: %d\n", twentiesDue);
printf("Tens: %d\n", tensDue);
printf("Fives: %d\n", fivesDue);
printf("Ones: %d\n", onesDue);
printf("Quarters: %d\n", quartersDue);
printf("Dimes: %d\n", dimesDue);
printf("Nickels: %d\n", nickelsDue);
printf("Pennies: %d\n", penniesDue);

Программа достигает десяти центов (первое наименование, которое не равно целому числу) и не продолжает рассчитывать количество никелей и пенни.Остаток изменения, оставшийся после четверти, составляет 8 центов, это не делится на 10. Но я не могу понять, как указать, чтобы игнорировать это, используя оператор if!

Таким образом, результат - когда программа достигает десяти центов, всепеременная после этого вычислить до нуля. Но там шможет быть один никель и три копейки!Вот результат, когда я запускаю его:

Сумма к оплате: 21,17 $ Тендерная сумма: $ 100

Изменение к оплате: (по деноминации)3 копейки: 0 никелей: 0 копеек: 0

1 Ответ

0 голосов
/ 16 февраля 2019

Хотя это решение работает, я не могу его использовать.НЕОБХОДИМО использовать оператор модуля.

У вас возникла проблема с вычислением оставшейся суммы после ее изменения в денежном выражении.Это аналогичная процедура, чтобы получить все цифры в номере.Например, с 198 после получения 1, оставшимся будет 198-1 * 100 = 98, затем мы получим 9, оставшиеся 98-9 * 10 = 8, и получим 8, тогда мы сделали.Вы рассчитали с неправильной формулой.Вот мой расчет с тем же способом получения цифр в числе и всего решения:

#include <stdlib.h>
#include <stdio.h>


int main()
{
// Amount Tendered and Purchase amount converted to pennies
int amountDue = 2117;
int amountGiven = 10000;

// Using each new change amount to calculate amount of denomination

// getting 20dollars notes
int change = amountGiven - amountDue;
int twentiesDue = (change / 20) / 100;

// get the remaining after change 20dollar notes, and 
// then divide 10*100 for getting 10dollars notes
int change10s = change % (20*100);
int tensDue = (change10s / 10) / 100;

// get the remaining after change 10dollar notes, and 
// then divide 5*100 for getting 5dollars notes
int change5s = change10s % (10*100);
int fivesDue = (change5s / 5) / 100;

// get the remaining after change 5dollar notes, and 
// then divide 1*100 for getting 1dollars notes
int change1s = change5s % (5*100);
int onesDue = (change1s / 1) / 100;

// get the remaining after change 1dollar notes, and 
// then divide 25 for getting quarter coins
int changeQs = change1s % (1*100);
int quartersDue = (changeQs / 25);

// get the remaining after change quarter coins, and 
// then divide 10 for getting dime coins
int changeDs = changeQs % 25;
int dimesDue = (changeDs / 10);

// get the remaining after change dime coins, and 
// then divide 5 for getting nickel coins
int changeNs = changeDs % 10;
int nickelsDue = (changeNs / 5);

// get the remaining after change nickel coins, and 
// then divide 1 for getting 1cent coins
int changePs = changeNs % 5;
int penniesDue = (changePs / 1);

printf("Amount Due: $21.17\nAmount Tendered: $100\n\n");
printf("Change Due:\n(by denomination)\n");
printf("Twenties: %d\n", twentiesDue);
printf("Tens: %d\n", tensDue);
printf("Fives: %d\n", fivesDue);
printf("Ones: %d\n", onesDue);
printf("Quarters: %d\n", quartersDue);
printf("Dimes: %d\n", dimesDue);
printf("Nickels: %d\n", nickelsDue);
printf("Pennies: %d\n", penniesDue);

return 0;
}
...