給定n個十六進制正整數,輸出它們對應的八進制數。node
輸入的第一行爲一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~九、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數,每一個十六進制數長度不超過100000。數組
輸出n行,每行爲輸入對應的八進制正整數。
【注意】
輸入的十六進制數不會有前導0,好比012A。
輸出的八進制數也不能有前導0。spa
2
39
123ABCcode
71
4435274 排序
#include <stdio.h> #include<string.h> #define MAXSIZE 100001 typedef struct { char data[MAXSIZE]; } Node; void convert(Node node); int main (void) { int time, i; scanf("%d", &time); Node number[time + 1]; for (i = 1; i <= time; i++) { scanf("%s", &number[i].data); } for (i = 1; i <= time; i++) { convert(number[i]); printf("\n"); } return 0; } void convert(Node node) { int i = 0, middle = 0, value = 0, array[4 * strlen(node.data)], j = 0, counter = 0, mildderAr[4]; while (node.data[i] != '\0') { value = (int) node.data[i]; /*輸入的值爲A-F*/ if ( value > 64) { middle = value - 55; } else if (value > 47) { /*輸入的值爲0-9*/ middle = value - 48; } /*將16進制轉換爲二進制,如 8 ---> 0001*/ for (j = 0; j <= 3; j++) { mildderAr[j] = middle % 2; middle /= 2; } /*將上面獲得的二進制數組逆置,即 8 ---> 1000,補充到array數組中*/ while (j > 0) { array[counter] = mildderAr[j - 1]; counter++; j--; } i++; } int sum[i * 3], count = 0; for (j = counter - 1; j >= 0; j -= 3) { if (j > 1) { sum[count] = array[j] + array[j - 1] * 2 + array[j - 2] * 4; } else { sum[count] = array[j] + array[j - 1] * 2; } count++; } for (i = count - 1; i >=0; i-- ) { if (i == count - 1 && sum[i] == 0) { continue; } printf("%d", sum[i]); } }