c++ - 用字母在 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。但我该怎么做呢?
解决方案
您似乎只停留在基础之间转换的问题上。我可以想到两种方法来做到这一点:
除以从 n-1 到 0 的基数的递减幂,其中 n 是最大幂。这需要您知道可能必须转换的最大值。每个部门在对应于该功率的位置为您提供一个数字。使用您的示例,您可以决定最多四位数,因此您将拥有:
246 / 16^^3 = 0 246 / 16^^2 = 0 246 / 16^^1 = F 6 / 16^^0 = 6
所以答案是 0x00F6。
使用从 1 到 n 递增的基数幂的模算术。同样,每个操作都会在与基数的幂对应的位置为您提供一个数字。使用相同的示例:
246 模 16^^1 = 6 240 模 16^^2 = F
再说一次,你有 0xF6。
推荐阅读
- python - 在 python 中创建 CSV 表时如何修复 IndexError?
- r - 聚合 k 个最近邻的特征
- javascript - chrome 扩展中未定义的 URL
- python - Py4JJavaError:调用 None.org.apache.spark.api.java.JavaSparkContext 时出错
- python - “Nonetype”对象没有“插入”属性,不明白为什么
- python - ImportError:无法导入名称,即使我在这里有所有解决方案
- python-3.x - 使用 numpy 对整个数据框进行日志转换
- typescript - 在 TypeScript 3.3 中工作的代码在 3.5+ 中被破坏,为什么?
- javascript - 如何使用汇总创建的 AMD 文件
- android - 为多台计算机离线安装 Android Studio