这个题弄了我半天,最后终于算是出答案了,可是在提交的时候却超时了,然后我放弃了,查了大佬的题解报告,粘在这里,方便以后复习
1 #include2 #include 3 4 char h[100002], b[400002], e[400002]; 5 int main() { 6 int n; 7 scanf("%d", &n); 8 while (n--) { 9 scanf("%s", h);10 int i, len = 0;11 /*先把16进制化成二进制——从后往前展开 */12 for (i = strlen(h) - 1; i >= 0; i--) {13 int v;14 if (h[i] >= '0' && h[i] <= '9')15 v = h[i] - '0';16 else v = h[i] - 'A' + 10;17 for (int j = 0; j<4; j++) {18 b[len++] = v % 2 + '0';19 v /= 2;20 }21 }22 int x = 0, cnt = 1;23 int l = 0;24 for (i = 0; i = 0 && e[i] == '0')39 /*去掉前导0*/40 i--;41 if (i<0)42 printf("0");43 for (; i >= 0; i--) {44 printf("%c", e[i]);45 }46 printf("\n");47 }48 return 0;49 }
个人觉得很不错的部分有很多,比如处理字符转为2进制,再在循环的基础上用判断的语句巧妙转为8进制