先将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;
}