今天的題好像有些難了,但是學到了新的知識,進制轉換,雖然還搞得不太明白。
二進制轉八進制: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
提示
先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。