문제

A진법 수 N을 입력 받아 B진법 수로 출력하는 프로그램을 작성하시오.

N에 사용되는 값은 0 ~ 9, A ~ Z이다.

(2 <= A, B <= 36) ( 0<= N<= 263-1 )

 

입력형식

입력은 100개 이하의 테스트 케이스가 행으로 구분하여 주어진다.

테스트 케이스의 끝에는 0이 주어진다. 

각 테스트 케이스에는 세 수 A, N, B가 공백으로 구분되어 주어진다.

 

출력형식

각 테스트 케이스에 대하여 A진법수 N을 B진법 수로 변환한 결과를 행으로 구분하여 출력한다.

 

<코드>

#include <stdio.h>
#include <string.h>
#include <math.h>

char convert(int N)
{
	if(N<10)
		return N+0x30;
	else
		return N+0x37;
}

//10진법 -> 2~36진법
void intto(unsigned long long N, int B)
{
	char arr[1000] = {0, };
	int i=0;

	while(1)
	{
		if(N<B)
		{
			arr[i] = convert(N);
			break;
		}

		arr[i] = convert(N%B);
		N /= B;
		i++;
	}
	
	for(; i>=0; i--)
		printf("%c", arr[i]);
	
	printf("\n");
}

int invert(char N)
{
	if('0'<=N && '9'>=N)
		return N-0x30;
	else if('A'<=N && 'Z'>=N)
		return N-0x37;
}

//2~36진법 -> 10진법
unsigned long long toint(char *N, int A)
{
	unsigned long long decimal = 0, tmp;
	int len;
	
	len = strlen(N);
	
	for(int i=len-1; i>=0; i--)
	{
		tmp = invert(N[i]);
		for(int j=0; j<(len-i-1); j++)
			tmp *= A;
		decimal += tmp;
	}
	
	return decimal;
}

int main()
{
	char N[100] = {0, };
	int A, B;
	
	while(1)
	{
		scanf(" %d", &A);
		if(!A)
			break;
		
		scanf("%s %d",N, &B);
		
		intto(toint(N, A), B);
	}
	
	
	return 0;
}

'코딩 > Beginner Coder' 카테고리의 다른 글

2514 : 문자열 찾기  (0) 2020.06.03
2604 : 그릇  (0) 2020.06.03
1534 : 10진수를 2,8,16진수로  (0) 2020.06.02
2814 : 이진수  (0) 2020.05.30
2813 : 소수의 개수  (0) 2020.05.29

+ Recent posts