728x90
반응형
10진수를 K진수로 바꿀 때, %K를 이용하여 나머지를 이용하자
+
10의 거듭제곱을 사용해야할 때, double을 return하는 pow함수는 오차를 만들어낸다
- 제목
k진수 정수의 자릿수 나누기
- 조건
시간 제한 : 1 초
메모리 제한 : 512 MB
- 문제
양의 정수 n과 k가 주어진다. n을 k진수로 변환한 수를 a라고 하자. a의 각 자릿수를 0을 기준으로 나눈 결과를 집합 b라고 하자. 0이 연속으로 나와서 공백이 생기는 경우는 집합 b에 포함되지 않는다. 집합 b에 있는 수의 합을 k진수로 출력하자. 예를 들어, n = 19, k = 2이면 a = 100112, b = {1, 11}, 1 + 11 = 12, 12 = 11002이므로 1100을 출력한다.
- 입력
첫 번째 줄에 양의 정수 n과 k가 공백을 사이에 두고 순서대로 주어진다.
- 출력
첫 번째 줄에 집합 b에 있는 수의 합을 k진수로 출력한다.
예제 입력1 | 예제 출력1 |
437674 3 | 22101 |
예제 입력2 | 예제 출력2 |
29 3 | 10 |
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
#define endl '\n'
#define fastio ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
long long intPow(int x){
long long sum = 1;
for(int n = 1; n <= x; n++) sum *= 10;
return sum;
}
int main() {
fastio;
vector<int> vec, ans;
long long N, K;
cin >> N >> K;
while(N != 0){
vec.push_back(N % K);
N /= K;
}
long long sum = 0;
for(int n = 0, m = 0 ; n < vec.size() ; n++){
if(vec[n] == 0) m = 0;
else sum += vec[n] * intPow(m++);
}
while(sum != 0){
ans.push_back(sum % K);
sum /= K;
}
for(int n = ans.size() - 1 ; n >= 0 ; n--) cout << ans[n];
cout << endl;
return 0;
}
728x90
반응형
'Problem Solving > BaekJoon' 카테고리의 다른 글
[BOJ/백준] 25286 - 11월 11일 (0) | 2022.09.11 |
---|---|
[BOJ/백준] 25501 - 재귀의 귀재 (0) | 2022.09.10 |
[BOJ/백준] 11404 - 플로이드 (0) | 2022.09.08 |
[BOJ/백준] 25377 - 빵 (0) | 2022.09.08 |
[BOJ/백준] 25558 - 내비게이션 (0) | 2022.09.07 |