<문제>
1. 8진수와 16진수를 각각 직접 변환하여 출력하는 모듈을 만들어야하는 부분이 쉽지 않았다.
최대한 다른 모듈을 쓰지 않고 기본연산자만으로 구하려고 했지만 도저히 문제풀이가 떠오르지 않아서 그냥 제곱구하는 pow() 함수만 갖다 쓰기로 했다.
-> 여기서 질문, c언어라서 최대한 저수준으로 짜보려고 해서 다른 라이브러리나 함수를 가져다 쓰지 않고자 한 것인데 이런 식으로 일종의 고집(?!)을 부리는 것이 과연 장기적으로 나의 프로그래밍 실력에 도움이 될까? 다른 언어(python, javascript, java 등)은 다른 라이브러리를 최대한 잘 활용하느냐가 실력의 척도라고 볼 수 있지 않나??
(1) 8진수 구하는 모듈


저기저 pow(10, count++)이 제멋대로 값이 나온다 이거 어떻게 해결하냐.. 뭐가 문제냐..
-> pow(arg1, arg2) 의 반환형은 double이고 arg1, arg2 모두 double 형이어야 한다. 그래서 어찌저찌 계산 과정은 실수형으로 하고 결과만 int로 형변환했더니 해결은 됐다. 휴
-> 이것도 그냥 배열에 저장하는게 더 깔끔해서 배열 사용함!
(2) 16진수 구하는 모듈
이거는 나머지가 10보다 큰 지 작은지에 따라 문자 또는 숫자로 출력해야하고 나머지 구하는 과정과 16진수로 읽는 과정이 거꾸로라서 출력을 어떻게 해야하는지 너무 고민했다.
그냥 배열에 나머지 계산한 결과를 넣기로 했다...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main(){
int inputNum = 1;
while(1){
printf("정수를 하나 입력하세요. >> ");
scanf("%d",&inputNum);
printf("\n\n");
int temp;
int octalNum[100], octalIdx=0;
int hexaNum[100], hexaIdx=0;
// 0. 프로그램 종료 조건 확인
if(inputNum == 0)
break;
// 1. 이진수 출력
printf("\t이진수: ");
for(int i=31;i>0;i--){
printf("%c", ((inputNum>>i)&1)?'1':'0');
}
printf("0");
printf("\n\n");
// 2. 팔진수 출력
printf("\t팔진수: ");
// 내가 만든 팔진수 모듈을 이용하여 octalNum에 저장
temp = inputNum;
while(temp>0){
octalNum[octalIdx++] = (temp%8);
temp /= 8;
}
// octalNum 출력
for(int i=octalIdx-1;i>=0;i--){
printf("%d",octalNum[i]);
}
printf("\t%8o",inputNum);
printf("\n\n");
// 3. 16진수 출력
printf("\t16진수 : ");
// 내가 만든 16진수 구하는 모듈을 이용하여 hexaNum에 저장
temp = inputNum;
while(temp>0){
hexaNum[hexaIdx++] = temp%16;
temp /= 16;
}
// hexaNum 문자로 출력
for(int i=hexaIdx-1;i>=0;i--){
if(hexaNum[i]<10)
printf("%d",hexaNum[i]);
else
printf("%c",hexaNum[i]+55);
}
printf("\t%8X\n\n\n",inputNum);
}
printf("종료합니다.\n");
return 0;
}
<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글
| [백준/27433/c++] 팩토리얼 2 (1) | 2024.02.05 |
|---|---|
| [프로그래머스/python] 외계어 사전 (0) | 2023.01.18 |
| [C/perfect C] 프로젝트 Part 1-04 : 소수로 삼각형 만들기 (0) | 2022.12.13 |
| [C/Perfect C] 프로젝트 Part 1-03 : 두 정수 교환의 다양한 방법 (0) | 2022.12.13 |
| [C/Perfect C] 프로젝트 Part 1-02 : 비트 연산 & | ^ ~ (0) | 2022.12.07 |