<문제>
정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보는 문제이다.
(단 0 <= a, b <= 2147483647, b는 0이 아니다.)
첫 줄에 합
둘째 줄에 차,
셋째 줄에 곱,
넷째 줄에 몫,
다섯째 줄에 나머지,
여섯째 줄에 나눈 값을 순서대로 출력한다.
(실수, 소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력)
나의 첫 번째 오답 풀이이다, 몫과 나머지만 계속해서 구했던 터라 여섯째 줄의 나눈 값이라는 게 표현이 조금 이상하다 느껴, 내가 생각해도 조금은 이상한 문장을 작성하였다.
#include<stdio.h>
int main(void)
{
int a,b;
double result;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
printf("%d\n",a-b);
printf("%d\n",a*b);
printf("%d\n",a/b);
printf("%d\n",a%b);
result = (2*a+a*b+a/b+a%b)/5.0;
printf("%lf",result);
return 0;
}
나의 두번째 풀이이다. 문제에서 실수형, 소수점 둘째 자리로 출력하라 했어로 float형으로 바꾸어준 후(형 변환) 나누기를 수행하였다.. 2f는 소수점 둘째 자리까지 출력한다는 뜻이다.
#include<stdio.h>
int main(void)
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
printf("%d\n", a - b);
printf("%d\n", a * b);
printf("%d\n", a / b);
printf("%d\n", a % b);
printf("%.2f\n", (float)a /(float)b);
return 0;
}
궁금증이 생겨 아래와 같은 코드를 작성한 후 출력을 해보았다. 결과로는 a/b의 결과는 몫의 값인 3 이나왔고,
A/B의 출력 값은 3.3333.. 이 나왔으며, C/D도 마찬가지로 3.333... 이 나온 것을 알 수 있었다. 왜 이런 결과가 나왔을까?라고 생각해 보았을 때, int형은 정수형이다. 10을 3으로 나누었을 때, 몫의 자리를 나눈 값의 자리라고 할 때, 나눈 값의 자리는 원래라면은 3.33333.... 의 식으로 계속해서 표현이 될 것이다. 그렇지만 int형은 정수밖에 표현을 하지 못하므로 몫 : 3이라는 결과밖에 얻지 못하는 것이다. 그래서 우리가 몫의 값을 구할 때 int형으로 / 연산을 시행하여 주는 이유다.
#include<stdio.h>
int main(void)
{
int a = 10;
int b = 3;
float A = 10;
float B = 3;
double C = 10;
double D = 3;
printf("%d\n", a / b);
printf("%f\n", A / B);
printf("%lf\n", C / D);
return 0;
}
이 문제를 통해 / 연산자가 몫(정수 값)을 구하는 연산자라고 단정 지었던 것을 보완할 수 있었던 것 같다.