문제
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 |