-
1. 진수 변환컴퓨터기초/#1 알고리즘 100선 2017. 1. 8. 22:11반응형
// 10진수 2진수로 변화 #include<stdio.h> void main(void) { int decim, a, b; printf("10진수를 입력하세요 : "); scanf("%d", &decim); while(decim != 1) { a = decim / 2; b = decim % 2; printf("%d", b); decim = a; } printf("1"); }
일단 빠르게 이렇게 만들어 놓고 보니 답은 나오는데 거꾸로 봐야하고 0을 치면 에러가 걸림
10진수 -> 2진수(0 제외)
고쳐보자
// 10진수 2진수로 변화 #include<stdio.h> #define NUM 2 #define MAX 12 void main(void) { int decim, a, b; int arr_num[MAX]; int num; printf("10진수를 입력하세요 : "); scanf("%d", &decim); num = -1; if(decim == 0) printf("0"); while(decim != 0) { num++; a = decim / NUM; b = decim % NUM; arr_num[num] = b; decim = a; } for(; num >= 0; num--) printf("%d", arr_num[num]); }
이렇게 고치니 0도 되고 거꾸로도 안나온다.
10진수 -> 2진수(0 포함)
#include<stdio.h> #define NUM 7 #define MAX 25 void main(void) { int decim, a, b; int arr_num[MAX]; int num; int jinbub; printf("10진수를 입력하세요 : "); scanf("%d", &decim); printf("변환할 진수를 입력하세요 :"); scanf("%d", &jinbub); num = -1; if(decim == 0) printf("0"); while(decim != 0) { num++; a = decim / jinbub; b = decim % jinbub; arr_num[num] = b; decim = a; } for(; num >= 0; num--) printf("%d", arr_num[num]); printf("(%d)", jinbub); }
이제 진법 변환까진 된다. 하지만 한계는 10진수에서 원하는 진수 변환이니깐 원하는 진수에서 원하는 진수를 변환하는게 목표10진수 -> 원하는 진수
#include<stdio.h> #include<math.h> int toDec(char *, int b); void main() { char test[10]; int jinbub; int test_num[10]; int i; printf("jinbub : "); scanf("%d", &jinbub); printf("number : "); scanf("%s", test); printf("\n %s(%d) -> %d(%d)", test, jinbub, toDec(test, jinbub),10); } int toDec(char* a , int b) //b is jinbub { int i,j,sum = 0; for(i = 0;; i++) { if(a[i] == '\0') break; } i--; j = i; for(; i >= 0; i--) { int stor; if(a[i] >= 48 && a[i] <= 57) // 0~9 ascii value stor = a[i] - 48; else if(a[i] >= 97 && a[i] <= 102) // a~f ascii value stor = a[i] - 97 + 11; else if(a[i] >= 65 && a[i] <= 70) // A~F ascii code stor = a[i] - 65 + 11; else return -1; //이부분 미 흡 sum = sum + stor * pow(b, j-i); } return sum; }
원하는 진수를 10진수로 바꾸는 부분
그리고 대망의 완성본!! ---------------------------------------------------
#include<stdio.h> #include<math.h> #include<stdlib.h> int toDec(char *, int b); void main() { char test[20]; int jinbub, jinbub2; char arr_num[20]; int a,b,num; int decim; printf("입력하는 숫자의 진수를 입력하세요 : "); scanf("%d", &jinbub); printf("변환을 원하는 숫자를 입력하세요 : "); scanf("%s", test); printf("변환을 원하는 진수를 입력하세요 : "); scanf("%d", &jinbub2); decim = toDec(test, jinbub); num = -1; if(decim == 0) printf("0"); while(decim != 0) { num++; a = decim / jinbub2; // 몫 b = decim % jinbub2; // 나머 지 if(b >= 0 && b <= 9) arr_num[num] = b + 48; else if(b >= 10 && b <= 15) arr_num[num] = b + 87; else break; decim = a; } printf("\n %s(%d) -> ", test, jinbub); for(; num >= 0; num--) printf("%c", arr_num[num]); printf("(%d)", jinbub2); } int toDec(char* a , int b) //b is jinbub { int i,j,sum = 0; for(i = 0;; i++) { if(a[i] == '\0') break; } i--; j = i; for(; i >= 0; i--) { int stor; if(a[i] >= 48 && a[i] <= 57) // 0~9 ascii value stor = a[i] - 48; else if(a[i] >= 97 && a[i] <= 102) // a~f ascii value stor = a[i] - 97 + 10; else if(a[i] >= 65 && a[i] <= 70) // A~F ascii code stor = a[i] - 65 + 10; else return -1; //이부분 미 흡 sum += stor * pow(b, j-i); } return sum; }
뿌듯 ㅎㅎ... 그리고 내 코딩실력에 실망... ㅎㅎ 살아서 무얼하나 이렇게 살아서... 무얼해
반응형'컴퓨터기초 > #1 알고리즘 100선' 카테고리의 다른 글
5. 로또 확률 (0) 2017.02.21 4. 글자 거꾸로 출력 (0) 2017.02.21 3. 피보나치 수열 (0) 2017.02.18 2. 소수 구하기 (0) 2017.02.18 알고리즘 100선의 시작 (0) 2017.01.08