算法题-数制转换

298 阅读1分钟

数制转换

思路

  1. 取模入栈
  2. 出栈打印

代码

enum DigitType {
    B = 2,
    O = 8,
    X = 16
} digitType;

void conversion(int N, enum DigitType dt) {
    switch (dt) {
        case B:
            printf("二进制:");
            break;
        case O:
            printf("八进制:");
            break;
        case X:
            printf("十六进制:");
            break;
    }
    
    int stackSize = 10;
    int *stack = (int*)malloc(sizeof(int) * 10);
    int top = -1;
    
    while (N) {
        if (top == stackSize - 1) {
            stackSize = stackSize + 10;
            stack = realloc(stack, stackSize *sizeof(int));
        }
        top ++;
        stack[top] = N % dt;
        N = N / dt;
    }
    
    while (top != -1) {
        int tmp = stack[top];
        switch (tmp) {
            case 10:
                printf("a");
                break;
            case 11:
                printf("b");
                break;
            case 12:
                printf("c");
                break;
            case 13:
                printf("d");
                break;
            case 14:
                printf("e");
                break;
            case 15:
                printf("f");
                break;
                
            default:
                printf("%d", tmp);
                break;
        }
        top --;
    }
    printf("\n");
}

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, 数制转换!\n");
    
    conversion(10 , B);
    conversion(10 , O);
    conversion(10 , X);
    
    conversion(1348 , B);
    conversion(1348 , O);
    conversion(1348 , X);
    
    return 0;
}

运行

传送门

算法题-爬楼梯