본문 바로가기
알고리즘/문제

구름 문제은행 (진법 변환) <C++>

by 코드 이야기 2020. 5. 30.
728x90

 

 

 

코드를 조금 길게 짠 것 같지만 일단은 맞았다.

 

음... 다음엔 좀 더 줄여보는걸로..

그나저나 1단계라니.. 윤군님 너무하십니다ㅠㅠ

 

#include <iostream>
#include <string>
using namespace std;

int n, r, sw, cp, cnt;
string t;

int main() {
  cin>>n>>t; //n과 t를 입력 받는다.
  for(r=2; r<=16; r++)  //2진법~16진법 하나하나 다 확인한다.
  {
    sw=0;
    cp=n;
    cnt=0;

    //--------------------------------------------------------------
    while(cp)  //우선 r진법으로 변환했을 때 t랑 자릿수의 개수가 같은지 체크해서, 같지 않다면 거른다.
    {
      cnt++;
      cp/=r;
    }
    if(cnt!=t.size())
    {
      continue;
    }
    else 
      cp=n;
    //--------------------------------------------------------------

    if(r>10)  //11진법 이상일 때-------------------------------------
    for(int i=t.size()-1; i>=0; i--)
    {
      if((cp%r)>=10)  //10이상은 영어로 바꾸어야함
      {
        if((char)(cp%r+55)==t[i])
          sw=1;
        else 
        {
          sw=0;
          break;
        }
      }
      else 
      {
        if((char)(cp%r+48)==t[i])
          sw=1;
        else 
        {
          sw=0;
          break;
        }
      }
      cp/=r;
    }
    //-------------------------------------------------------------

    else //10진법 이하일 때-----------------------------------------
    for(int i=t.size()-1; i>=0; i--)
    {
      if((char)(cp%r+48)==t[i])
        sw=1;
      else 
      {
        sw=0;
        break;
      }
      cp/=r;
    }
    //-------------------------------------------------------------

    if(sw) 
      break;

  }
  cout<<r;
}

 

 

728x90

댓글