일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Spring JPA
- regression
- MYSQL
- Baekjoon
- spotify
- SECS
- Spring
- 백준
- SECS-II
- programmers
- 프로그래머스
- 회원가입
- 회귀
- CS
- python
- 파이썬
- Computer Science
- 자바
- SWEA
- 스포티파이
- C++
- SW Expert Academy
- Spotify Api
- c
- modern c++
- 비트겟
- spring boot
- SECS/GEM
- Gem
- java
Archives
- Today
- Total
비버놀로지
[JUNGOL 정올] 3116 긴 자리 진법 변환 (C++) 본문
728x90
http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2398&sca=5090
제한시간1000 ms 메모리제한64 MB 해결횟수26 회 시도횟수81 회
문제
A진법 수 N을 입력 받아 B진법 수로 출력하는 프로그램을 작성하시오.
N에 사용되는 값은 0 ~ 9, A ~ Z이다.
(2 <= A, B <= 36) ( N은 1자리 이상 200자리 이하의 수이다. )
입력형식
입력은 100개 이하의 테스트 케이스가 행으로 구분하여 주어진다.
테스크 케이스의 끝에는 0이 주어진다.
각 테스트 케이스에는 세 수 A, N, B가 공백으로 구분되어 주어진다.
출력형식
각 테스트 케이스에 대하여 A진법수 N을 B진법 수로 변환한 결과를 행으로 구분하여 출력한다.
입력 예2 10110 1010 2543 16 16 ABC 8 0 |
출력 예229EF 5274 |
Hint!
해당 값을 10진수로 바꾸어 준 후, 변환하고자 하는 숫자로 나누어 나오는 나머지 값을 활용해서 문제를 해결한다.
그렇게 나온 값을 역순으로 변경해 주면 원하는 진법의 숫자로 변환이 된다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int A, B;
char S[100000];
// A의 값이 0이 들어올 때까지 반복
while (1) {
cin >> A;
if (A == 0) {
break;
}
cin >> S >> B;
long temp = strtol(S, NULL, A);
long start = temp;
string answer = "";
// 주어진 값이 0이 될때까지 나눠준다.
while (temp > 0) {
// 나머지 값이 10이 이상일때는 문자로 표현
if (temp%B >= 10) {
char word = 'A' + temp % B - 10;
answer += word;
}
else {
answer.append(to_string(temp%B));
}
temp /= B;
}
// 완성된 문자열을 뒤집어 준다.
reverse(answer.begin(), answer.end());
if (start == 0) {
answer = "0";
}
cout << answer<<endl;
}
return 0;
}
728x90
'ALGORITM > C C++' 카테고리의 다른 글
[Programmers 프로그래머스] 42860 조이스틱 (C 언어) (0) | 2024.12.22 |
---|---|
[JUNGOL 정올] 2514 문자열 찾기 (C++) (0) | 2023.01.12 |
[JUNGOL 정올] 1534 10진수를 2,8,16진수로 (C++) (0) | 2023.01.12 |
[JUNGOL 정올] 2809 약수 (C++) (0) | 2023.01.12 |
[Programmers 프로그래머스] 42860 조이스틱 (C/C++) (0) | 2021.04.01 |
Comments