본문 바로가기

Coding Tests/코드업

코드업 1044번(큰수를 입력받을때)

정수를 1개 입력받아 1만큼 더해 출력해보는 문제이다.
(단, -2147483648 ~ +2147483647의 범위로 입력된다.)

 

나의 첫번째 오답 풀이이다. 입력값이 2147483647이고,

여기서 1을 더하여 출력을 하면 끝자리만이 8로 바뀌는 것이 아니라 

앞에 -가 붙고 끝자리가 8로 바뀌는 것을 알 수 있다. 그 이유는 int형의 값의 표현 범위를 넘어서 거꾸로 한 바퀴를 돌아왔기 때문에 이와 같은 출력 값이 나오게 되는 것이다. 

#include<stdio.h>
int main(void)
{
	int A;
	scanf_s("%d", &A);
	printf("%d", ++A);
	return 0;
}

나의 두 번째 풀이인데, 이 문제에서의 입력값은 대략 21억의 엄청 큰 수이다. 이런 큰 수의 경우 int형, 즉 일반적인 정수 형이 표현할 수 있는 범위의 거의 마지노선이라고 할 수 있다.

그러므로 이와 같은 큰 숫자를 다룰 경우에는 long long int(긴 int형이라 생각)를 사용해주어야 한다. long long int를 입력받을 때는 % lld를 넣어줘야 하고, 출력 시에도 % lld를 넣어줘야 한다. 이렇게 long long int를 사용하면 큰 숫자도 입력을 원활하게 받을 수 있다.

#include<stdio.h>
int main(void)
{
	long long int A;
    scanf_s("%lld", &A);
	printf("%lld", A+1);
	return 0;
}