본문 바로가기
⌨️CS-PS/백준_수학&구현

[Baekjoon/백준][11382][C/C++] 꼬마 정민

by 미르의 블로그 2023. 5. 2.
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

수학, 구현, 사칙연산 문제. 정수 자료형의 표현 범위를 알고 있다면, 쉽게 풀 수 있다.

1. 문제

https://www.acmicpc.net/problem/11382

 

11382번: 꼬마 정민

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.

www.acmicpc.net

[문제]

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

[입력]

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.

[출력]

A+B+C의 값을 출력한다.

[예제 입력 1]

77 77 7777

[예제 출력 1]

7931
반응형

2. 풀이

int 자료형의 표현범위는 4byte = 32bit = $2^{32}$ 이고, long 자료형의 표현범위는 8byte = 64bit = $2^{64}$ 이다.

10진수와 2진수 사이의 상관관계 살펴보면, $10^3 =  2^{10} = 1000$ 이라 볼 수 있다.

(서로 정확히 일치하는 값은 아니지만, 편의상 $=$ 기호를 사용하였다.)

 

주어진 입력값은 $10^{12} = 2^{40}$ 이하의 값이므로, int 자료형의 표현범위를 넘어선다.

따라서, int 대신 long 자료형을 사용하여 덧셈연산을 진행하여야 한다.

3. 코드

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
	/* Faster */
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	/* Input */
	long a, b, c; cin >> a >> b >> c;

	/* Output */
	cout << a + b + c;

	/* Return */
	return 0;
}

/* 10의 12승 = 약 2의 40승. 따라서, int로 표현할 수 있는 범위를 넘어선다. */
728x90
반응형