我需要编写一个C程序,它将从用户输入中读取一个数字(在基数10中)并将其输出到任何2的幂的基数中。计算必须在一个函数中执行,{{1} },它接受参数to_base_n
和num
并在相应的基数中打印数字。作为验证检查,程序还检查基数是否具有base
函数的2的幂。
执行转换的方式是通过长除法执行以下伪码中的逻辑:
isPowerofTwo
我认为这是算术上合理的。但是当我尝试将82000转换为基数4时,我得到以下输出:
出现的大数字甚至比void to_base_n(int x, int n){
int r, i = 0
int digits[16]
while (x ≠ 0){
r = x mod n
x = x / n
digits[i] = r
i++
}
for (i = 0, i < 15, i++)
print digits[i]
}
本身还要大,所以我认为模数不能正确地进入数组(因为∀{x,n}; x mod n&lt; x)。我似乎无法找到它的错误。完整代码如下所列。
num
任何人都可以帮忙解释一下它的错误吗?
答案 0 :(得分:4)
基数4中的数字82000将是: 110001100 你得到的是什么。你的错误在于:
它们向后打印。
您打印的数字比您应该多,所以您打印垃圾。
答案 1 :(得分:1)
您忽略了使用伪代码提取的位数,因此您可以打印数组中未初始化的元素。
for (i = 0, i < 15, i++)
print digits[i]
它们以相反的顺序打印。我建议将其更改为
for (i = i - 1, i >= 0, i--)
print digits[i]
并作为函数中的C代码
for(i = i - 1; i >= 0; i--)
printf("%d|",digits[i]);