본문 바로가기
프로그램/C++ 1000제

C++ 46제] vector 사용, 조건에 맞는 진수와 승수값을 출력하시오.

by 건티 2022. 6. 16.
728x90

출처 : 반크_세계유산 석굴암

 

문제]

다음 조건에 맞는 프로그램을 작성하시오.

조건)

1. 진수와 승수를 입력하시오.

2. 진수는 2,4,8,10,16 진수만 입력 가능하다.

3. 승수는 2진수는 31, 4진수는 16, 8진수는 11, 10진수는 10, 16진수는 8승까지 표현이 가능하다

4. 잘못된 진수와 승수가 입력되면 에러 메시지를 출력하시오.

5. 진수의 입력한 승수까지 수를 모두 출력하시오.

6. 한 라인에 5개씩 출력하도록 하시오.

 

출력 예1)

진수와 승수를 입력하시오 : 10 10

10진수의 10까지의 승수들은 아래와 같습니다.

  10 100 1000 10000
100000 1000000 10000000 100000000 1000000000

출력 예2)

진수와 승수를 입력하시오 : 5 20

진수와 승수의 입력이 조건을 벗어났습니다.

 

참고풀이]

#include <iostream>
#include <vector>
#include <iomanip> //setw()
using namespace std;

int JariSu(int k)
{
   int x,y;
   for(x=y=1; y<=k; y*=10) x++;
   return x;
}

int main()
{
   vector<int> v;
   vector<int> jinsu(5);
   vector<int> sungsu(5);
   int i,j;//반복 또는 인덱스 변수 
   int Jin,Sung;//진수와 승수 입력변수 
   int chk;//조건에 맞는 지 체크변수 
   int n;//증가값변수 
   int J;//자리수 변수 

   //jinsu와 sungsu vector에 조건 값을 넣는다.
   jinsu.push_back(2);
   jinsu.push_back(4);
   jinsu.push_back(8);
   jinsu.push_back(10);
   jinsu.push_back(16);
   sungsu.push_back(31);
   sungsu.push_back(16);
   sungsu.push_back(11);
   sungsu.push_back(10);
   sungsu.push_back(8);

   //진수와 승수를 입력한다.
   cout << "진수와 승수를 입력하시오 : ";
   cin >> Jin >> Sung;

   //입력 수가 조건에 맞는 지 체크한다. 
   for(chk=0,i=0; i<jinsu.size();i++)
      if(Jin==jinsu[i] && (Sung>=0 && Sung<=sungsu[i]))
         { chk=1; break; }

   //계산된 승수 값들을 vector에 저장한다.
   if(chk)
   {
      for(i=0;i<Sung;i++)
      {
         n=1;
         for(j=1;j<=i;j++)
            n*=Jin;
         v.push_back(n);
      }

      //결과 출력.
      cout << Jin << "진수의 ";
      cout << Sung << "까지의 승수들은 아래와 같습니다.\n";
      //마지막 수를 기준으로 일정 자리수를 구한다. 
      J=JariSu(v[v.size()-1]); 
      for(i=0;i<v.size();i++)
      {
         cout << setw(J);
         if((i+1)%5) cout << v[i];
         else cout << v[i] << endl;
      }
   }
   else
      cout << "진수와 승수의 입력이 조건을 벗어났습니다.\n";

   return 0;
}

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도

 

반응형

댓글