基数4表示中的超出(-1)

时间:2016-11-18 13:49:59

标签: algorithm math base internal-representation

在过去的几天里,我一直试图解决这个问题,但我无法找到解决问题的方法。所以,在这里:

给定基数4(即0,1,2,3作为数字的数字),找到任何负整数或正整数的基数4表示中的多余(-1)。 例子: -6 =( - 1)22 相反,(-1)22超过(-1)的基数4 = 2 * 4 ^ 0 + 2 * 4 ^ 1 +( - 1)* 4 ^ 2 = 2 + 8 - 16 = 10 - 16 = -6在基地10

27 = 2(-1)( - 1) 相反,2(-1)( - 1)=( - 1)* 4 ^ 0 +( - 1)* 4 ^ 1 + 2 * 4 ^ 2 = -1 - 4 + 32 = 27

我确实想出了一些正数的算法,但是没有一个算法适用于所有负数,所以进入垃圾箱就行了。

有人能在这里给我一些线索吗?谢谢!

----------------

编辑:我将试图以一种不会引起任何混淆的方式重新解释这个问题。

考虑通过从每个数字中减去1得到的基数,称为基数4的多余 - ( - 1)。在这个基数中,任何数字都可以用数字-1,0,1,2表示。所以,问题要求一个算法,它将任何整数作为输入,并给出该给定数字的表示作为输出。

示例:

十进制-6 = -1 2 2表示基数4的过量 - ( - 1)。

为了验证这一点,我们采用表示-1 -1 2并将其转换为十进制数,从最右边的数字开始并使用通用基数n到基数10算法,如下所示:

number = 2 * 4 ^ 0 + 2 * 4 ^ 1 +( - 1)* 4 ^ 2 = 2 + 4 - 16 = -6

2 * 4^0 + 2 * 4^1 + (-1) * 4^2 = 2 + 4 - 16 = -6

1 个答案:

答案 0 :(得分:1)

我不知道“quaterit”是否是这个表示中基数的正确单词,但无论如何我都会使用它。

既然你说你已经有一个正数的算法,我会尝试将负数作为输入并写一些使用你已有的东西。下面的代码不太有用,但我会在最后解释原因。

setBroadcast()

这里的想法是,每个负数int[] BaseFourExcessForNegativeNumbers(int x) { int powerOfFour = 1; while (-powerOfFour > x) { powerOfFour *= 4; } int firstQuaterit = -1; int remainder = x + powerOfFour; int[] otherQuaterits; if (remainder >= 0) { otherQuaterits = BaseFourExcessForPositiveNumbers(remainder); } else { otherQuaterits = BaseFourExcessForNegativeNumbers(remainder); } int[] result = new int[otherQuaterits.Length + 1]; result[0] = firstQuaterit; for (int index = 0; index < otherQuaterits.Length; ++index) { result[index + 1] = otherQuaterits[index]; } return result; } 将以此表示形式的x开头。如果(-1)位于(-1)位置,我们希望了解如何代表4^n以了解如何表示其余数字。

我编写的代码不起作用的原因是它没有考虑第二个quaterit为0的可能性。如果发生这种情况,我的代码将产生的数组将丢失为0.实际上,如果以相同的方式写入x - (-1)*4^n,则生成的数组将缺少每个 0,否则将是正确的。解决方法是跟踪第一个quaterit占用的位置,然后制作相应大小的数组,并将其从后面填充到前面。