목적
- 나머지 연산자를 이해한다.
- 어느 부분에서 어떤 몫과 나머지가 필요한지 역할을 이해한다.
문제
코드
#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;
}
해설
- 코드에 있는 참고 주석을 확인하세요
- 이전 문제와 초를 일/시/분/초 로 나누는 문제를 잘 푸시면 이 문제를 쉽게 이해하실수 있습니다. 나머지는 정수형 자료에만 적용이 된다는 점을 명심하시고 형변환을 하시기 바랍니다. 이때 자료 손실을 주의 하시기 바랍니다.
참고
- 유사 문제