先将n转为2进制,再转为8进制。 2进制下每3位化为一位8进制。

#include #include #include using namespace std;

int main(){

int n;
while(cin>>n){

    vector<char> answer;//用字符串处理,answer存储2进制数
    while(n!=0){//化为2进制
        answer.push_back(n%2+'0');
        n/=2;
    }

    vector<char> f_answer;//存储8进制数

    if(answer.size()%3!=0){//若answer.size()不为3的倍数,则高位添0
        for(int i=0;i<(answer.size()%3);i++){
            answer.push_back('0');
        }
    }

    int flag=1;
    for(int i=0;i<answer.size();i++){

        if(flag%3==0){//每3位化为一个8进制数
            f_answer.push_back(((answer[i-2]-'0')+(answer[i-1]-'0')*2+(answer[i]-'0')*4)+'0');

        }
        flag++;
    }

    for(int i=f_answer.size()-1;i>=0;i--){//注意f_answer中的存储顺序是逆序的,要逆序输出
        cout<<f_answer[i];
    }

    cout<<endl;

}

return 0;

}