【发布时间】:2021-12-09 04:33:31
【问题描述】:
我一直在研究将给定数字(十进制基数)转换为从 2 到 16 的任何其他基数的代码。
显然,我遇到了函数base_conversion_it(它代表迭代)反向打印值的问题。
我不能使用数组或指针,互联网上的每个人似乎都这样解决这个问题。我的任务需要创建一个迭代函数和一个递归函数(我做过并且工作过)。
void base_conversion_it(unsigned int n, unsigned int b) {
if (n > 0) {
//bases between 2 and 16
if (b >= 2 && b <= 16) {
int r; //r = remainder
int q = 1; //quotient
int num; //saves the remainder
while (q != 0) {
r = n % b;
printf("%X", r);
q = n / b;
n = q;
}
}
}
}
【问题讨论】:
-
您可能会或可能不会注意到参数
n是二进制的,而不是十进制的。它实际上并没有太大区别,但整数不会在计算机内部存储为十进制数。 -
“迭代、无指针、无数组”的约束使得很难产生有效的解决方案。您可能需要确定将打印多少位,然后安排打印重新计算的每个数字 - 这涉及多个循环。
-
@JonathanLeffler 我已经通过
k = (log10(n) / log10(b) + 1)设法确定了该号码的位数,但我如何相应地打印它们? -
查看来自 0______ 的更新答案——迭代解决方案相当简洁。它确实有两个循环——但我不经意间想到了三个循环,后两个是嵌套的。当然,避免嵌套要好得多。此外,请注意浮点运算中可能存在的不准确性。
标签: c printing reverse base ansi-c