일지

JUNGOL...61

niamdank 2021. 4. 19. 17:57

Beginner_Coder/수학2/진법 변환


문제                                            

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

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

(2 ≤ A, B ​ 36) ( 0​ N​ 263-1 )

 

입력 형식                                     

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

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

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

 

출력 형식                                     

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

 

입력 예                                        

2 11010 8

2 10110 10

10 2543 16

16 ABC 8

0

 

출력 예                                        

32

22

9EF

5274

 

Hint!

2진수 1101을 자리수별 가중치를 주어 10진수로 나타내면 아래와 같다.

1101 = 0 * 24 + 1 * 23 + 1 * 22 + 0 * 21 + 1 이므로 

     = (((0*2 + 1) * 2 + 1) * 2 + 0) * 2 + 1 과 같다. 


ConvertFromTo.h

#include <iostream>
#include <string>

using std::string;

 

ConvertFromTo.cpp

void ConvertFromTo::Code()
{
	int a, b;
	string n;

	while (true)
	{
		std::cin >> a;

		if (a == 0)
		{
			break;
		}

		std::cin >> n >> b;

		std::cout << FromDecimal(ToDecimal(n, a), b) << '\n';
	}
}

long long ConvertFromTo::ToDecimal(string n, int from)
{
	long long result{ 0 };
	long long multiple{ 1 };

	for (int i{ static_cast<int>(n.size()) - 1 }; i >= 0; i--)
	{
		if (n[i] - '0' > 9)
		{
			result += (n[i] - 'A' + 10) * multiple;
		}
		else
		{
			result += (n[i] - '0') * multiple;
		}

		multiple *= from;
	}

	return result;
}

string ConvertFromTo::FromDecimal(long long n, int to)
{
	if (n == 0)
	{
		return "0";
	}

	string result;

	while (n > 0)
	{
		long long temp{ n % to };
		if (temp < 10)
		{
			result += ('0' + temp);
		}
		else
		{
			result += ('A' + temp - 10);
		}
		n /= to;
	}

	return string(result.rbegin(), result.rend());
}

 


실행 결과 Success(100)

 

※ 입력 값의 범위에 따라 적절한 자료형을 써야한다.


 

NadanKim/CodingTest_JUNGOL: JUNGOL 코딩 테스트를 위한 저장소 (github.com)

 

NadanKim/CodingTest_JUNGOL

JUNGOL 코딩 테스트를 위한 저장소. Contribute to NadanKim/CodingTest_JUNGOL development by creating an account on GitHub.

github.com