2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.
- 입력 : 11001100
- 출력 : 314
vector <int> ::reverse_iterator riter, res_iter;
for (riter = v.rbegin(); riter != v.rend(); riter++)
{
...
}
벡터 변수를 순방향이 아닌 역방향으로 이용.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string str;
vector <int> v;
vector <int> res;
int tmp = 0;
int count = 0;
cin >> str;
v.push_back(0);
v.push_back(0);
for (int i = 0; i < str.length(); i++)
v.push_back(str[i] - '0');
vector <int> ::reverse_iterator riter, res_iter;
for (riter = v.rbegin(); riter != v.rend(); riter++)
{
for (int j = 0; j < count; j++)
*riter *= 2;
tmp += *riter;
count++;
if (count % 3 == 0 )
{
res.push_back(tmp);
count = 0;
tmp = 0;
}
}
for (res_iter = res.rbegin(); res_iter != res.rend(); res_iter++)
cout << *res_iter;
return (0);
}
v.push_back(0);
v.push_back(0);
psuh_back(0)을 두번 실행한 이유는
1101와 같이 세개씩 나눌 때 딱 나누어 떨어지지 않은 경우를 위해서이다.
count % 3 == 0 일때 결과물에 push_back을 해주는데, 만약 위 경우처럼 나누어 떨어지지 않는다면 첫번째 자리수가 빠지게 된다.