Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 10진수를 2 8 16진수로(C++) 본문
1534 : 10진수를 2 8 16진수로
제한시간: 1Sec 메모리제한: 32mb
해결횟수: 703회 시도횟수: 1387회
10진수를 입력 받아서 2, 8, 16진수로 바꾸어 출력하는 프로그램을 작성하시오.
[Copy]27 2 | [Copy]11011 |
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | /************************************************************** Problem: 1534 User: a132034 Language: C++ Result: Success Time:0 ms Memory:1740 kb ****************************************************************/ #include <iostream> using namespace std; int main() { int n; int d; int i = 0; int arr[32] = { 0 }; cin >> n >> d; if (d == 2) { while (n != 1) { arr[i++] = n % 2; n /= 2; } arr[i] = n; for ( int j = i; j >= 0; --j) cout << arr[j]; } else if (d == 8) { while (n > 7) { arr[i++] = n % 8; n /= 8; } arr[i] = n; for ( int j = i; j >= 0; --j) cout << arr[j]; } else if (d == 16) { while (n > 15) { arr[i++] = n % 16; n /= 16; } arr[i] = n; for ( int j = i; j >= 0; --j) arr[j] < 10 ? cout << arr[j] : cout << ( char )(arr[j] + 55); } return 0; } |
10진수에서 2,8,16진수로 바꾸는 모두 동일하다.
각 진수로 더이상 나눈 몫이 0일 때 까지 나누어주며 나머지를 저장한 후, 반대로 출력해주면 된다.
(ex - 2진수의 경우 2보다 작은 값, 8진수의 경우 8보다 작은 값, 16진수의 경우 16보다 작은 값이 나올 때 까지 나누어 주면 된다.)
출력의 경우 16진수는 int로 표현할 수 없는 알파벳이 있기 때문에 10보다 큰 수의 경우 출력을 char형으로 해준다.
삼항연산자를 사용하여 1줄로 표현하였다.
삼항연산자 : 조건식 ? 참일때 실행할 구문 : 거짓일 때 실행할 구문
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 약수와배수(C++) (0) | 2016.05.08 |
---|---|
알고리즘 내리막길(JAVA) (0) | 2016.05.08 |
실력키우기 약수구하기(C++) (0) | 2016.05.03 |
실력키우기 선택정렬(C++) (0) | 2016.05.03 |
실력키우기 후위표기법(JAVA) (0) | 2016.05.02 |