ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JUNGOL...61
    일지 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

     

    댓글

Designed by Tistory.