首页 > 解决方案 > 用字母在 Base 10-16 中打印

问题描述

我被困在一个项目中,我必须打印出 10-16 的任何基数的任何数字。问题是在这些基础中,您必须在前面添加一个字母,我不太了解如何使用递归。谁能帮我?

int conversionFunction(int num, int base)
{
     if (num == 0)
        return 0;
     int x = num % base;
     num /= base;
     if (x < 0)
        num = num + 1; 
     conversionFunction(num, base);
     if (x < 0){
        cout << x+(base * -1);
     }
     else{
        cout << x;
        return x;
     }
}

如果我以 16 为基数做 246,我得到 156。我知道实际答案应该是 F6。转换时 15 转换为 F。但我该怎么做呢?

标签: c++

解决方案


您似乎只停留在基础之间转换的问题上。我可以想到两种方法来做到这一点:

  1. 除以从 n-1 到 0 的基数的递减幂,其中 n 是最大幂。这需要您知道可能必须转换的最大值。每个部门在对应于该功率的位置为您提供一个数字。使用您的示例,您可以决定最多四位数,因此您将拥有:

    246 / 16^^3 = 0 246 / 16^^2 = 0 246 / 16^^1 = F 6 / 16^^0 = 6

所以答案是 0x00F6。

  1. 使用从 1 到 n 递增的基数幂的模算术。同样,每个操作都会在与基数的幂对应的位置为您提供一个数字。使用相同的示例:

    246 模 16^^1 = 6 240 模 16^^2 = F

再说一次,你有 0xF6。


推荐阅读