首页 > 作文

蓝桥杯题解

更新时间:2023-04-07 12:09:02 阅读: 评论:0

原题地址:十六进制转八进制

问题描述

给定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);ela[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');el a[num].push_back('0');shi%=int(pow(2.0,j));}}el{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');el 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<<" ";// } el if(l%3==2)//两位 { e+=pow(2.0,1)*a[num][l-1]; e+=a[num][l]; ba.push_back(e); cout<<"2."<<e<<" ";// } el 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();//输出完要清空,只申请了一个空间给八进制,而且添加工商行政管理用的是pushbacke=0;//e也要清空}*/return 0;}

题解目录

本文地址:https://blog.csdn.net/qq_43508196/article/details/85961943

本文发布于:2023-04-07 12:09:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3d9fc7ef05dc38539ceabaec339a1772.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:蓝桥杯题解.doc

本文 PDF 下载地址:蓝桥杯题解.pdf

标签:会有   前导   清空   正整数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图