二进制转 二的幂次 进制 通用模板
2025-12-21 11:53:15
发布于:广东
54阅读
0回复
0点赞
解题思路
八进制是 2^3 进制,核心规律为 每3位二进制数对应1位八进制数,转换步骤如下:
- 分组规则:将二进制字符串从 低位到高位 每3位分为一组;若总位数不是3的倍数,高位补0凑齐3位(代码通过边界处理隐式补零)。
- 转换规则:每组3位二进制数转换为对应的十进制数(0~7),该数即为八进制的一位。
- 结果整理:将每组转换后的结果按 高位到低位 排列,得到最终八进制字符串。
示例:二进制 1011 → 低位分组补0为 001 011 → 每组转换为 1 和 3 → 八进制 13。
#include<bits/stdc++.h>
using namespace std;
string printN(string n,int base){
vector<int>ve;
for(int i=0;i<n.size();i++){
ve.push_back(n[i]-'0');
}
reverse(ve.begin(),ve.end());
string ans;
int log2base=log2(base)-1;
for(int i=0;i<ve.size();i++){
int s=0;
for(int j=min(int(ve.size()-1),i+log2base);j>=i;j--){
s=s*2+ve[j];
}
i+=log2base;
if(s<10)ans+='0'+s;
else ans+='A'+(s-10);
//cout<<s<<" ";
}
reverse(ans.begin(),ans.end());
return ans;
}
int main(){
string n;
cin>>n;
// cout<<printN(n,4)<<endl;
// cout<<printN(n,8)<<endl;
cout<<printN(n,16)<<endl;
}
这里空空如也




有帮助,赞一个