今天的题好像有些难了,但是学到了新的知识,进制转换,虽然还搞得不太明白。
二进制转八进制:1.取一合三法 2,添0补0
补上今天的题(一定不能把cout<<endl;关起来这样会影响换行)
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int n; 6 int i; 7 string b1,b2; 8 9 int main() 10 { 11 cout<<"请输入n的值:"<<endl; 12 cin>>n; 13 for(i=0;i<n;i++) 14 { 15 cin>>b1; 16 b2=""; 17 for(int j=0;j<b1.length();j++) 18 { 19 switch(b1[j]) 20 { 21 case'0': 22 b2+="0000";break; 23 case'1': 24 b2+="0001";break; 25 case'2': 26 b2+="0010";break; 27 case'3': 28 b2+="0011";break; 29 case'4': 30 b2+="0100";break; 31 case'5': 32 b2+="0101";break; 33 case'6': 34 b2+="0110";break; 35 case'7': 36 b2+="0111";break; 37 case'8': 38 b2+="1000";break; 39 case'9': 40 b2+="1001";break; 41 case'A': 42 b2+="1010";break; 43 case'B': 44 b2+="1011";break; 45 case'C': 46 b2+="1100";break; 47 case'D': 48 b2+="1101";break; 49 case'E': 50 b2+="1110";break; 51 case'F': 52 b2+="1111";break; 53 default:break; 54 } 55 } 56 if(b2.length()%3==1) 57 b2="00"+b2; 58 if(b2.length ()%3==2) 59 b2="0"+b2; 60 int flag=0; 61 for(int g=0;g<b2.length()-2;g+=3) 62 { 63 int p=4*(b2[g]-'0')+2*(b2[g+1]-'0')+b2[g+2]-'0'; 64 if(p) 65 flag=1; 66 if(flag) 67 cout<<p; 68 } 69 cout<<endl; 70 71 } 72 return 0; 73 }
题目:
十六进制转八进制
问题描述
给定 n 个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数 n (1<=n<=10)。
接下来 n 行,每行一个由 0~9、大写字母 A~F 组成的字符串,表示要转换的十六进制正
整数,每个十六进制数长度不超过 100000。
输出格式
输出 n 行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导 0,比如 012A。
输出的八进制数也不能有前导 0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。