dedecms怎么做网站,想学做网站,贵州省兴义市专做网站公司,淄博网站设1.题目信息
时间限制#xff1a;1.0s 内存限制#xff1a;512.0MB
问题描述 给定n个十六进制正整数#xff0c;输出它们对应的八进制数。
输入格式 输入的第一行为一个正整数n #xff08;1n10#xff09;。 接下来n行#xff0c;每行一个由09、大写字母AF组成…1.题目信息
时间限制1.0s 内存限制512.0MB
问题描述 给定n个十六进制正整数输出它们对应的八进制数。
输入格式 输入的第一行为一个正整数n 1n10。 接下来n行每行一个由09、大写字母AF组成的字符串表示要转换的十六进制正整数每个十六进制数长度不超过100000。
输出格式 输出n行每行为输入对应的八进制正整数。
【注意】 输入的十六进制数不会有前导0比如012A。 输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】 先将十六进制数转换成某进制数再由某进制数转换成八进制。
2.算法实现 数字输入改写成字符串输入利用switch语句进行16进制到2进制的转换 ps:为方便3位3位划分2进制转8进制字符串长度不是3的倍数的需要补0 通过algorithm库中的reverse函数翻转字符串和完成补0操作再翻转回来 利用switch语句和substr函数进行2进制到8进制的转换 去0输出flag标志判断
3.完整代码
#include iostream
#include string
#include algorithm
using namespace std;
int main()
{string s1,s2,ss;int n;cinn;while(n--){s1;s2;ss;cins1;couts1 s1.length()endl;for(int i0;is1.length();i){//switch 语句转化16进制为2进制switch(s1[i]){case 0:{s20000;break;}case 1:{s20001;break;}case 2:{s20010;break;}case 3:{s20011;break;}case 4:{s20100;break;}case 5:{s20101;break;}case 6:{s20110;break;}case 7:{s20111;break;}case 8:{s21000;break;}case 9:{s21001;break;}case A:{s21010;break;}case B:{s21011;break;}case C:{s21100;break;}case D:{s21101;break;}case E:{s21110;break;}case F:{s21111;break;}default:break;}}couts2 2进制endl;//不一定是3的约数所以要往前补0reverse(s2.begin(),s2.end());couts2 反转后endl;int nums2.length();if(num%31)s200;else if(num%32)s20;couts2 加0后endl;//反转回来reverse(s2.begin(),s2.end());couts2 再反转endl;//3位3位划分2进制转化为八进制for(int i0;is2.length();i3){if(s2.substr(i,3)000)ss0;else if(s2.substr(i,3)001)ss1;else if(s2.substr(i,3)010)ss2;else if(s2.substr(i,3)011)ss3;else if(s2.substr(i,3)100)ss4;else if(s2.substr(i,3)101)ss5;else if(s2.substr(i,3)110)ss6;else if(s2.substr(i,3)111)ss7;}coutss 去0前endl;//去0输入int flag0;for(int i0;iss.length();i){if(flag0ss[i]0)continue;coutss[i];flag1;}cout 去0后endl;}return 0;
}4.补充
16进制转10进制
16进制转2进制按字符串处理同上2进制转10进制按数处理用pow函数
#include iostream
#include string
#include cmath
using namespace std;
int main()
{string s1,s2;s1;s2;cins1;for(int i0;is1.length();i){//switch 语句转化16进制为2进制switch(s1[i]){case 0:{s20000;break;}case 1:{s20001;break;}case 2:{s20010;break;}case 3:{s20011;break;}case 4:{s20100;break;}case 5:{s20101;break;}case 6:{s20110;break;}case 7:{s20111;break;}case 8:{s21000;break;}case 9:{s21001;break;}case A:{s21010;break;}case B:{s21011;break;}case C:{s21100;break;}case D:{s21101;break;}case E:{s21110;break;}case F:{s21111;break;}default:break;}}//2进制转10进制int sum0;int lens2.length();for(int i0;ilen;i){if(s2[i]1)sumpow(2,len-i-1);}coutsum;return 0;
}