蓝桥杯之暴力求解:十六进制转八进制

首先根据提示要先转成某进制数,十进制由于数的长度排除,所以确定转为二进制,再由二进制每三位一转,转成八进制。

代码如下:



#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n=0,i=0,m=0;

scanf("%d",&n);
for(int i=0;i<n;i++)
{
string s1,s2,s3;
cin>>s1; 
m=0;
s2="";
s3="";//置空 
for(int j=0;j<s1.size();j++)//遍历输入字符串中每个元素
{
if(s1[j]=='0') s2+="0000";
if(s1[j]=='1') s2+="0001";
if(s1[j]=='2') s2+="0010";
if(s1[j]=='3') s2+="0011";
if(s1[j]=='4') s2+="0100";
if(s1[j]=='5') s2+="0101";
if(s1[j]=='6') s2+="0110";
if(s1[j]=='7') s2+="0111";
if(s1[j]=='8') s2+="1000";
if(s1[j]=='9') s2+="1001";
if(s1[j]=='A') s2+="1010";
if(s1[j]=='B') s2+="1011";
if(s1[j]=='C') s2+="1100";
if(s1[j]=='D') s2+="1101";
if(s1[j]=='E') s2+="1110";
if(s1[j]=='F') s2+="1111";  
} //穷举将16进制s1转换为2进制s2 
if(s2.size()%3==1)//字符串头部余留一位数字,需添加两个零
{
s2="00"+s2; 

if(s2.size()%3==2)//字符串头部余留两位数字,需添加一个零
{
s2="0"+s2; 
}
//cout<<s2<<endl; 
for(int k=0;k<s2.size();k=k+3)
{
s3+=(s2[k]-'0')*4+(s2[k+1]-'0')*2+(s2[k+2]-'0')+'0';
}
//cout<<s3<<endl;
while(s3[m]=='0')
{
m++;
break;
}
//printf("m的值:%d\n",m);
for(;m<s3.size();m++)
{
cout<<s3[m];
}
cout<<endl;
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值