ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory. Flag Counter