본문 바로가기
⌨️ Algorithm/C

1/20 [C] 백준 2033번 - 반올림

by Lucy Oh 2022. 1. 24.

<문제>

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

 

2033번: 반올림

정수 N이 주어져 있을 때 이 수가 10보다 크면 일의 자리에서 반올림을 하고, 이 결과가 100보다 크면 다시 10의 자리에서 반올림을 하고, 또 이 수가 1000보다 크면 100의 자리에서 반올림을 하고.. (

www.acmicpc.net

 

<내가 제출한 코드>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	
	int num, i, cnt = 0;

	scanf("%d", &num);

	if (num >= 10) {
		for (i = 1; num / i != 0; i *= 10, cnt++);

		cnt--;
		i = 1;

		for (i = 1; cnt--; i *= 10) {
			if ((num % (i * 10) / i) >= 5) {
				num -= ((num % (i * 10) / i) * i);
				num += i * 10;
			}
			else num -= ((num % (i * 10) / i) * i);
		}
	}

	printf("%d", num);
}

코드가.. 너무 복잡한 느낌이 좀 있긴 하다.

근데 그냥 말그대로 만약 입력한 숫자 num이 10 이상일때,

일의 자리의 숫자가 5이상이면 그 자리에 있는 숫자를 0으로 만들고 다음 자리의 숫자에 1을 더하고,

5미만이면 그냥 그 자리에 있는 숫자를 0으로 만든다.

이를 자리수 - 1번 만큼 반복시켜 주는 코드이다.

 

** 실수한 부분?

일의 자리의 수가 입력된다면 num이 출력되지 않는 오류가 있었다.

그래서 전체적으로 if문을 씌워서 만약 num이 10 미만이면 그냥 num자체를 출력할 수 있게 해주었다.

댓글