https://www.acmicpc.net/problem/2033
문제
정수 N이 주어져 있을 때 이 수가 10보다 크면 일의 자리에서 반올림을 하고, 이 결과가 100보다 크면 다시 10의 자리에서 반올림을 하고, 또 이 수가 1000보다 크면 100의 자리에서 반올림을 하고.. (이하 생략) 이러한 연산을 한 결과를 출력하시오.
입력
첫째 줄에 정수 N이 주어진다. (0 ≤ N ≤ 99,999,999)
출력
첫째 줄에 위와 같은 연산을 한 결과를 출력하시오.
예제 입력 1
15
예제 출력 1
20
문제를 보고 잘 이해가 안가실 수 있다
간단히 설명하자면
1543라는 수가 있다면
1540으로 반올림하고
1500으로 반올림하고
2000으로 반올림한다
10, 100, 1000 ... 이렇게 나아가면서 반올림을 한다
#include <iostream>
int round(int ten, int n) { // 2개의 인자를 받는 반올림 함수를 선언
if(n >= ten / 2) return ten; // ten이 10이라면 n이 5보다 크거나 작으면 10을 리턴한다
else return 0; // n이 4보다 작거나 같으면 0을 리턴한다
}
int main() {
int n; // 입력을 위한 변수 선언
int ten = 10; // 10의 자리수부터 100 1000 점점 나아가야하기 위한 변수 ten = 10 선언
std::cin >> n; // 입력
while(n > ten) { // n이 ten보다 클 때까지 이 반복문을 돈다
n = (n - n % ten) + round(ten, n % ten);
// n = 54라고 하자면, (54 - 54 % 10) == 50, round(10, 54 % 10) == 0
// 그러므로 n == 50이 된다
ten *= 10; // while루프를 돌 때마다 ten에 10을 곱해서 10 100 1000 10000 이렇게 나아갈 수 있도록 한다
}
std::cout << n << std::endl; // while 루프가 끝나면 n 출력
return 0;
}
#include <iostream>
#include <cmath>
#include <string>
int round(int ten, int n) {
if(n >= ten / 2) return ten;
else return 0;
}
int main() {
int n;
int ten = 10;
std::cin >> n;
while(n > ten) {
n = (n - n % ten) + round(ten, n % ten);
ten *= 10;
}
std::cout << n << std::endl;
return 0;
}
'C++ > 백준' 카테고리의 다른 글
[C++] 백준) 10988번 팰린드롬인지 확인하기 문제풀이 (0) | 2020.08.26 |
---|---|
[C++] 백준) 10798번 세로읽기 문제풀이 (0) | 2020.08.26 |
[C++] 백준) 1977번 완전제곱수 문제풀이 (0) | 2020.08.25 |
[C++] 백준) 1526번 가장 큰 금민수 문제풀이 (0) | 2020.08.24 |
[C++] 백준) 1356번 유진수 문제풀이 (0) | 2020.08.23 |