zoukankan      html  css  js  c++  java
  • 十六转八进制

    这个题弄了我半天,最后终于算是出答案了,可是在提交的时候却超时了,然后我放弃了,查了大佬的题解报告,粘在这里,方便以后复习

     1 #include<stdio.h>
     2 #include<string.h>
     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<len; i++) {
    25             /*每三位二进制转成一位8进制,最后不足三位补0*/
    26             if (cnt == 4 || i == len - 1) {
    27                 x = cnt * (b[i] - '0') + x;
    28                 cnt = 1;
    29                 e[l++] = x + '0';
    30                 x = 0;
    31             }
    32             else {
    33                 x = cnt * (b[i] - '0') + x;
    34                 cnt *= 2;
    35             }
    36         }
    37         i = l - 1;
    38         while (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("
    ");
    47     }
    48     return 0;
    49 }

    个人觉得很不错的部分有很多,比如处理字符转为2进制,再在循环的基础上用判断的语句巧妙转为8进制

  • 相关阅读:
    Kubernetes 部署微服务电商平台(16)
    Android开发如何去除标题栏title
    eclipse中logcat偶尔不显示log的问题解决办法
    Two Sum
    事件的解除与绑定
    使用 Canvas 绘图
    表单脚本
    事件
    DOM2 和 DOM3
    DOM扩展
  • 原文地址:https://www.cnblogs.com/kangdong/p/8654088.html
Copyright © 2011-2022 走看看