为什么我的to_base_n程序不起作用?

时间:2016-01-07 10:02:29

标签: c base

我需要编写一个C程序,它将从用户输入中读取一个数字(在基数10中)并将其输出到任何2的幂的基数中。计算必须在一个函数中执行,{{1} },它接受​​参数to_base_nnum并在相应的基数中打印数字。作为验证检查,程序还检查基数是否具有base函数的2的幂。

执行转换的方式是通过长除法执行以下伪码中的逻辑:

isPowerofTwo

我认为这是算术上合理的。但是当我尝试将82000转换为基数4时,我得到以下输出:

Output

出现的大数字甚至比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

任何人都可以帮忙解释一下它的错误吗?

2 个答案:

答案 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]);