목적
  - 나머지 연산자를 이해한다.
  - 어느 부분에서 어떤 몫과 나머지가 필요한지 역할을 이해한다.

문제
사용자 삽입 이미지

코드

#include <iostream>

#define DOLLAR2WON 1048 // DOLLAR2WON 은 환률을 변환하기 위한 단순 매크로

using namespace std;

int main(void)
{
 double dDollar, dDol2Won, dWon2Dol, dChargeDol;
 dDollar = dDol2Won = dWon2Dol = dChargeDol = 0.0;
 long lWon = 0;

 /*
 dDollar : 입력받는 달러 값
 dDol2Won : 입력받은 달러가 원화로 변한 값
 lWon : 입력받는 원화 값
 dWon2Dol : 입력받은 원화가 달러화로 변한 값
 dChargeDol : 거스름돈 달러

 원화는 달러화로 우선변환합니다.

 */


 cout << "물건 값(달러): ";
 cin >> dDollar;

 cout << "받은 돈(원화): ";
 cin >> lWon;

 dDol2Won = dDollar * DOLLAR2WON;

 while(dDol2Won >= lWon)
 {
  cout << "물건값이 모자름. 다시 입력: ";
  cin >> lWon;

 }

 dWon2Dol = (lWon - dDol2Won) / DOLLAR2WON;
 dChargeDol =  (long)(dWon2Dol * 10) / 10.0;

 cout << "거스름돈: " << dChargeDol << "달러" << endl;
 cout << "거스름돈의 개수" << endl;
 cout << "  * Dollar : " << (int)dChargeDol << "장" << endl;
 cout << "  * Quarter : " << (int)((dChargeDol - (int)dChargeDol) / 0.25) << "개" << endl;
 cout << "  * Cent : " << (int)((dChargeDol - (int)dChargeDol) * 100) % 25 << "개" << endl;

 /*
 달러 - 달러 : 소숫점 버림 = 센트 부분 (0.0 ~ 0.99)
 센트 % 25 는  쿼터 인데  위 식에서 0 ~ 99 가 아니고 0.0 ~ 0.99 까지 이므로 0.25
 로 나누면 몫은 쿼터고 나머지는 센트
 센트를 구하는 과정에서 나머지 연산자는 정수형에만 적용되므로 * 100 하여 소숫점을 강제로 올린후에
 int 형으로 강제 형변환하여 나머지 연산을 적용

 예상 계산치
 10.9 => 10 달러 90센트 => 10달러 3쿼터 15센트

 실제 계산값
 10.9 => 10 + 0.9 => 10 + 0.75 (0.25 * 3) + 0.15 (나머지 0.6 * 0.25)

 시분초를 계산하는 문제를 잘 풀어 보시기 바랍니다.

 */
 
 return 0;
}

해설
  - 코드에 있는 참고 주석을 확인하세요
  - 이전 문제와 초를 일/시/분/초 로 나누는 문제를 잘 푸시면 이 문제를 쉽게 이해하실수 있습니다. 나머지는 정수형 자료에만 적용이 된다는 점을 명심하시고 형변환을 하시기 바랍니다. 이때 자료 손실을 주의 하시기 바랍니다.

참고
  - 유사 문제

Posted by 카켈