1373


質問する


バイナリ数を指定した場合は、バイナリ数に変換するプログラムを作成します.

入力


最初の行はバイナリ数を与えます.与えられた数の長さは10万を超えない.

しゅつりょく


1行目に与えられた数字を8進出力に変換します.


入力
  • :1101001100
  • 出力:314
  • に答える

  • ベクトル変数
  • を使用
  • の2進数を後ろから順に3つの数字に組み合わせ、各桁数の和を加えると8進数が得られます.
  • reverse_iterator

    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)を2回実行する理由は
    1101のように3つに分けたときに分けられなかった場合のためです.
    count%3=0の場合は結果をpush backし、上記のように分けることができなければ最初のビット数は削除されます.