창수씨 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;
}



뿌듯 ㅎㅎ... 그리고 내 코딩실력에 실망... ㅎㅎ 살아서 무얼하나 이렇게 살아서... 무얼해

반응형