BASIC-12 十六進制轉八進制
阿新 • • 發佈:2018-02-27
轉換成 二進制 void can tdi 字符串 space 輸入 urn
問題描述
給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進制正整數。
【註意】
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
【提示】
先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。
解題思路:由輸入的格式長度決定無法通過整數型變量進行運算,而提示給出先轉換進制,首先想到十六進制和八進制對於二進制都有很方便的計算方法,由此為思路解決。
1 #include<cstdio> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 6 int main(void) 7 { 8 int n; 9 char c; 10 scanf("%d", &n); 11 for(int i = 0; i < n; i++){ 12 vector<char> s1; 13 int count = 0; 14 while(scanf("%c", &c) == 1 && c == ‘\n‘); 15 while(c != ‘\n‘){ 16 s1.push_back(c); 17 count++; 18 scanf("%c", &c); 19 } 20 21 if(s1[0] == ‘0‘){ 22 printf("0\n"); 23 continue; 24 } 25vector<char>::iterator it; 26 vector<char> s2; 27 for(it = s1.begin(); it != s1.end(); it++){ 28 switch(*it){ 29 case ‘0‘:{ 30 s2.push_back(‘0‘);s2.push_back(‘0‘); 31 s2.push_back(‘0‘);s2.push_back(‘0‘); 32 break; 33 } 34 case ‘1‘:{ 35 s2.push_back(‘0‘);s2.push_back(‘0‘); 36 s2.push_back(‘0‘);s2.push_back(‘1‘); 37 break; 38 } 39 case ‘2‘:{ 40 s2.push_back(‘0‘);s2.push_back(‘0‘); 41 s2.push_back(‘1‘);s2.push_back(‘0‘); 42 break; 43 } 44 case ‘3‘:{ 45 s2.push_back(‘0‘);s2.push_back(‘0‘); 46 s2.push_back(‘1‘);s2.push_back(‘1‘); 47 break; 48 } 49 case ‘4‘:{ 50 s2.push_back(‘0‘);s2.push_back(‘1‘); 51 s2.push_back(‘0‘);s2.push_back(‘0‘); 52 break; 53 } 54 case ‘5‘:{ 55 s2.push_back(‘0‘);s2.push_back(‘1‘); 56 s2.push_back(‘0‘);s2.push_back(‘1‘); 57 break; 58 } 59 case ‘6‘:{ 60 s2.push_back(‘0‘);s2.push_back(‘1‘); 61 s2.push_back(‘1‘);s2.push_back(‘0‘); 62 break; 63 } 64 case ‘7‘:{ 65 s2.push_back(‘0‘);s2.push_back(‘1‘); 66 s2.push_back(‘1‘);s2.push_back(‘1‘); 67 break; 68 } 69 case ‘8‘:{ 70 s2.push_back(‘1‘);s2.push_back(‘0‘); 71 s2.push_back(‘0‘);s2.push_back(‘0‘); 72 break; 73 } 74 case ‘9‘:{ 75 s2.push_back(‘1‘);s2.push_back(‘0‘); 76 s2.push_back(‘0‘);s2.push_back(‘1‘); 77 break; 78 } 79 case ‘A‘:{ 80 s2.push_back(‘1‘);s2.push_back(‘0‘); 81 s2.push_back(‘1‘);s2.push_back(‘0‘); 82 break; 83 } 84 case ‘B‘:{ 85 s2.push_back(‘1‘);s2.push_back(‘0‘); 86 s2.push_back(‘1‘);s2.push_back(‘1‘); 87 break; 88 } 89 case ‘C‘:{ 90 s2.push_back(‘1‘);s2.push_back(‘1‘); 91 s2.push_back(‘0‘);s2.push_back(‘0‘); 92 break; 93 } 94 case ‘D‘:{ 95 s2.push_back(‘1‘);s2.push_back(‘1‘); 96 s2.push_back(‘0‘);s2.push_back(‘1‘); 97 break; 98 } 99 case ‘E‘:{ 100 s2.push_back(‘1‘);s2.push_back(‘1‘); 101 s2.push_back(‘1‘);s2.push_back(‘0‘); 102 break; 103 } 104 case ‘F‘:{ 105 s2.push_back(‘1‘);s2.push_back(‘1‘); 106 s2.push_back(‘1‘);s2.push_back(‘1‘); 107 break; 108 } 109 } 110 } 111 112 if((count * 4) % 3 == 1){ 113 s2.insert(s2.begin(), ‘0‘);s2.insert(s2.begin(), ‘0‘); 114 } 115 else if((count * 4) % 3 == 2){ 116 s2.insert(s2.begin(), ‘0‘); 117 } 118 119 int first = 1; 120 for(it = s2.begin(); it != s2.end(); it += 3){ 121 int re = (*it - ‘0‘) * 4 + (*(it + 1) - ‘0‘) * 2 + (*(it + 2) - ‘0‘); 122 if(first == 1){ 123 if(re == 0) continue; 124 else{ 125 printf("%d", re); 126 first = 0; 127 } 128 } 129 else printf("%d", re); 130 } 131 printf("\n"); 132 } 133 134 135 return 0; 136 }
BASIC-12 十六進制轉八進制