C언어(C++ 포함) 나누기, 몫, 나머지
C언어와 C++에서 나눗셈 연산이 수행되는 원리를 살펴보고
몫과 나머지를 구하는 방법에 대해서도 다루어보도록 하겠습니다.
나눗셈 연산 원리
5 나누기 2의 연산 결과는 2.5라는 사실을 쉽게 알 수 있지요.
그러나 C언어나 C++에서 해당 연산을 수행해보면 그냥 2가 출력되는 것을 볼 수 있습니다.
심지어는 실수 자료형으로 값을 선언해도 2.5가 아닌 2.0이 저장되고 있습니다.
#include <stdio.h>
int main(){
int a = 5 / 2;
double b = 5 / 2;
printf("%d\n", a); // 2
printf("%.1f\n", b); // 2.0
}
이와 같은 현상이 발생하는 이유는 정수 자료형 간의 연산은 기본적으로 정수를 반환하도록
설정되어있기 때문입니다.
2.5라는 결과를 제대로 반환받기 위해서는 양쪽 숫자 중 적어도 한 쪽은 실수 자료형으로
선언을 해주어야 합니다.
#include <stdio.h>
int main(){
double c = 5.0 / 2;
double d = 5 / 2.0;
double e = (double)5 / 2; // 강제 형변환을 이용한 케이스
printf("%.1f\n", c); // 2.5
printf("%.1f\n", d); // 2.5
printf("%.1f\n", e); // 2.5
}
위와 같이 최소 한 쪽이라도 5.0처럼 실수 자료형으로 명시를 해주시거나 혹은
나눗셈을 수행하기 전에 강제 형변환을 먼저 거쳐주어야 결과가 제대로 반환됨을 유의해주세요.
몫을 구하는 방법
이제 C언어나 C++에서 두 수를 나눈 몫을 구하는 방법을 정리해보겠습니다.
먼저, 정수끼리의 연산의 경우에는 위에서 다룬 원리대로 나눗셈의 결과가 몫으로 반환되기에
단순히 나눗셈을 수행해주면 됩니다.
#include <stdio.h>
int main(){
int a = 5 / 3;
int b = 10 / 2;
int c = 7 / -3;
printf("%d\n", a); // 1
printf("%d\n", b); // 5
printf("%d\n", c); // -2
}
만일, 실수 자료형이 포함된 두 수 간의 나누기에서의 몫을 구하고 싶다면
나눗셈을 수행한 결과를 정수 자료형으로 선언받거나, 혹은 강제 형변환을 이용하면 됩니다.
#include <stdio.h>
int main(){
int d = 0.7 / 0.2; // 정수로 선언받기 이용
printf("%d\n", d); // 3
// 강제 형변환 이용
printf("%.1f\n", (0.7 / 0.2)); // 3.5
printf("%d\n", (int)(0.7 / 0.2)); // 3
}
나머지를 구하는 방법
C, C++에서 나머지를 구하는 방법은 다른 프로그래밍 언어와 마찬가지로
% 연산을 통해서 구해주시면 됩니다.
다만, 기본 % 연산은 정수끼리의 나누기에서의 나머지만을 지원하며,
실수 자료형이 포함된 경우에서 나머지를 구하려면
C언어의 경우는 math.h 라이브러리의 fmod 등의 함수를
C++의 경우는 cmath 라이브러리의 std::fmod 등의 함수를 사용해주셔야 합니다.
(참고 : double 자료형 -> fmod, float 자료형 -> fmodf, long double 자료형 -> fmodl)
#include <stdio.h>
#include <math.h>
int main(){
// 정수끼리의 나머지 연산
int a = 5 % 2;
int b = 5 % -2;
printf("%d\n", a); // 1
printf("%d\n", b); // 1
// 실수 자료형이 포함된 나머지 연산
float c = fmodf(0.5, 0.2);
double d = fmod(0.5, 0.2);
long double e = fmodl(0.5, 0.2);
printf("%.1f\n", c); // 0.1
printf("%.1f\n", d); // 0.1
printf("%.1Lf\n", e); // 0.1
}
'C & C++' 카테고리의 다른 글
C언어 함수 선언 방법 경우의 수 정리(input, return 타입별) (0) | 2022.05.18 |
---|---|
[C언어, C++] 주석 처리란? / 주석 달기 방법 정리(한 줄, 여러 줄, 단축키) (2) | 2022.05.01 |
[C언어] if문 활용 조건문 사용법 예제 정리 (else if, else문, 중첩 조건문 등) (0) | 2022.05.01 |