蓝桥杯题解-十六进制转八进制-BASIC-12
程序员文章站
2022-03-27 21:20:48
原题地址:十六进制转八进制问题描述给定n个十六进制正整数,输出它们对应的八进制数。输入格式输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式输出n行,每行为输入对应的八进制正整数。【注意】输入的十六进制数不会有前导0,比如012A。输出......
原题地址:十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制
解1:
1.十六进制先转十进制(参考BASIC-10-十六进制转十进制),然后再除八取余。
QAQ怎么会有问题,我自己测试完美啊。
我点击了第二个锦囊,提示我先转为二进制。而且我看了些其他人的解,决定先搁置十进制为中间进制的方法,转为用二进制。
代码暂时先贴这里。
代码1:
#include"iostream"
#include"string"
#include"cmath"
using namespace std;
void changeto8(int a)
{
int p;//p保存除16取余的值
p=a%8;//先取余
a/=8;//再/=
if(a>0)
changeto8(a);//然后递归
cout<<p;
}
int main()
{
int n;//转换个数
string s[10];//保存十六进制数
int a[10]={0};//保存十进制
cin>>n;
fflush(stdin);
for(int i=0;i<n;i++)
getline(cin,s[i]);
for(int num=0;num<n;num++)//计算十进制
for(int i=(s[num].length()-1),j=0;i>=0;j++,i--)
{
if(int(s[num][i])>=65)
a[num]+=(int(s[num][i])-55)*pow(16.0,j);
else
a[num]+=(int(s[num][i])-48)*pow(16.0,j);
}
for(int num=0;num<n;num++)//算八进制
{
changeto8(a[num]);
cout<<endl;
}
return 0;
}
解2:
二进制转八进制尚未完成。
代码2:
#include"iostream"
#include"string"
#include"cmath"
using namespace std;
int main()
{
int n;//转换个数
string s[10];//保存十六进制数
string ba;//保存当前八进制数
string a[10];//保存二进制
cin>>n;
fflush(stdin);//清空键盘缓存
for(int i=0;i<n;i++)
getline(cin,s[i]);
for(int num=0;num<n;num++)//遍历n个数,从下标为0的开始
{
for(int i=0;i<s[num].length();i++)//从最高位开始计算二进制
{
if(int(s[num][i])>=65)
{
for(int shi=int(s[num][i])-55,j=3;j>=0;j--)
{
if(shi/int(pow(2.0,j)))a[num].push_back('1');
else a[num].push_back('0');
shi%=int(pow(2.0,j));
}
}
else
{
for(int shi=int(s[num][i]-48),j=3;j>=0;j--)
{
if(shi/int(pow(2.0,j)))a[num].push_back('1');
else a[num].push_back('0');
shi%=int(pow(2.0,j));
}
}
}
//cout<<a[num]<<endl;//二进制输出来看看,前面会有0
}
/*
int e=0;//放每三位转换八进制后的数
for(int num=0;num<n;num++)//八进制转换并输出
{
for(int l=a[num].length()-1,e=0;l%3>=0&&l>0;e=0,l-=3)
{
if(l%3==0)//三位
{
e+=pow(2.0,2)*a[num][l-2];
e+=pow(2.0,1)*a[num][l-1];
e+=a[num][l];
ba.push_back(e);
cout<<"3."<<e<<" ";//
}
else if(l%3==2)//两位
{
e+=pow(2.0,1)*a[num][l-1];
e+=a[num][l];
ba.push_back(e);
cout<<"2."<<e<<" ";//
}
else if(l%3==1)//一位
{
e+=a[num][l];
ba.push_back(e);
cout<<"3."<<e<<" ";//
}
}
/*for(int l=ba.length()-1;l>=0;l--)//输出
{
cout<<ba[l];
}*/
cout<<endl;//输出每个八进制后换行
ba.clear();//输出完要清空,只申请了一个空间给八进制,而且添加用的是pushback
e=0;//e也要清空
}
*/
return 0;
}
本文地址:https://blog.csdn.net/qq_43508196/article/details/85961943
下一篇: 小品《相亲2》搞笑台词、视频