본문 바로가기

셈틀/C/C++

10진수를 BCD코드로 출력

BCD 코드란?

BCD(binary-coded decimal)코드는 10진수 각 자리의 숫자를 4비트(네 자리)의 2진수로 표현한 것입니다. 네자리의 2진수를 큰 쪽부터 8의 자리, 4의 자리, 2의 자리, 1의 자리라고 하기 때문에 8421코드라고도 합니다.

사용자 삽입 이미지


10진수를 BCD코드로 출력
#include <stdio.h>
/*25. 10진수를 입력하면 BCD 코드로 출력하는 프로그램을 작성하시오*/

int numlen(int num);//10진수를 입력받아 자리수를 리턴하는 함수
void prtBCD(int num);//BCD코드를 출력하는 함수
void prtBin(int num);//2진수를 출력하는 함수

int main()
{
	int num; 
	printf("Put the number : ");
	scanf("%d", &num);
	prtBCD(num);	//BCD코드 출력함수
	return 0;
}

//자리수 리턴함수
int numlen(int num){
	int i=0;
	while(1){
		if(num!=0){
			i++;
			num=num/10;
		}
		else
			break;
	}
	return i;
}

//10진수를 입력받아 2진수 출력함수
void prtBin(int num){
	int i=3; //최대 쉬프트 넘버: 여기서는 2자리 이상의 10진수는 취급하지 않으므로 
	int flag=1;
	for(i;i>=0;i--){
		if(num&(flag<<i))
			printf("1");
		else
			printf("0");
	}
}

//10진수를 입력받아 BCD코드 출력함수
void prtBCD(int num){
	int len, i;
	int divisor=1;
	int pstNum;

	len=numlen(num);//입력받은 10진수의 자리수를 len에 넣는다.

	for(i=1;i<len;i++){//divisor에 자리수만큼 10을 곱한수를 넣는다.(입력받은 10진수를 한자리씩 떼어낼 때 사용)
		divisor*=10;
	}

	for(i=1;i<=len;i++){//자리수만큼 반복
		pstNum=num/divisor; //제일 큰자리의숫자부터 하나씩 끊은 정수를 pstNum에 입력
		prtBin(pstNum); //pstNum을 2진수로 출력
		//printf("%2d", pstNum);  //검산용 10진수로 출력하기
		num=num-pstNum*divisor;//이미 출력한 자리의 숫자를 빼서 없앤다.
		divisor/=10;//자리수가 하나 줄었으므로 10으로 한번 나눈다.
	}
	printf("\n");
}


결과값:
사용자 삽입 이미지사용자 삽입 이미지

'셈틀 > C/C++' 카테고리의 다른 글

해결  (0) 2008.11.17
Cprogramming.com  (0) 2008.11.10
최대공약수(GCD)와 최소공배수(LCM) 구하기  (4) 2008.11.07
strstr함수 구현하기  (0) 2008.10.28
비트연산을 이용한 한달 출석부 관리 프로그램  (2) 2008.10.17