0

考虑以下int;

int start = 287729472784;

从该 int 开始,我需要创建一个长度仅为三位数的新 int,我可以使用 0-9 之间的任何值。

但是,为了创建新的 int,我不能使用任何形式的已经存在的随机数生成器。

我想知道是否可以结合使用modulesxor, bit-shift操作来以某种方式减少数字。例如 xor 最后一个数字与它之前的数字,但我不确定这是否可能。

基本上我需要从起始 int 创建一个三位数的 long int,理想情况下将起始 int 减少到三位数的长度。

我希望这是有道理的,我会很感激任何意见。

谢谢

4

3 回答 3

3

不确定是否了解您的需求,但如果您唯一的愿望是从另一个数字生成一个 3 位数字,那么模函数可能会帮助您:

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

如果您希望伪随机 modifiedNumber 为每一代更改,您可以使用 time in miliseconds :

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

我希望它会有所帮助。

价值

于 2012-02-19T21:34:09.510 回答
1

嗯。我不明白这个问题,但是......start % 1000会产生最低有效的 3 位数字start(虽然:小心负值)?

于 2012-02-19T21:25:34.850 回答
1

最佳答案实际上取决于最终数字的使用。由于 SHA1 开始时相当“随机”,因此使用 % 1000 就足够了——如果您要寻找的只是表中的哈希值,您将在所有可能的 SHA1 输入范围内得到很好的分布。

但是,如果您正在寻找一个转换,其中 3 位数字与输入几乎没有关系(意思是,不仅仅是一个模......),您需要一些方法来将所有位放入结果中。如果是这种情况,我建议使用 CRC16 之类的转换。将 SHA1 值输入您最喜欢的 CRC16 例程,然后返回模 1000 的值,请记住,某些结果会比其他结果更频繁地显示。

于 2012-02-19T21:39:46.887 回答