2014-10-03 143 views
-1

说我们有一个10位电话号码(xxx)xxx xxxx。如果每个数字可以是任何数字0-9,则需要多少内存才能存储每个可能的数字。您需要多少内存来存储每个可能的电话号码?

这是我的计算,但我想,以确保它是正确的:

有10^9种可能的组合(9个数字,每个有10个可能的值)。 每个数字可以是0 - 9,这是10个可能的值,因此每个数字必须是4位。 每个数字是4位* 9位= 36位。 (36比特* 10^9组合)/(8比特/字节)= 4.5 * 10^9字节/ 10^6字节/ GB = 4500GB。

是吗?谢谢! :)

+0

9位数字? 3 + 3 + 4 = 9? – par 2014-10-03 00:30:32

+5

这个问题似乎是题外话题,因为它是算术练习,而不是编程问题。 – 2014-10-03 00:31:25

+0

这不仅仅是算术。排列的数量是,但如何将它们存储在最小的内存中与编程有关,而不仅仅是数学。 – hatchet 2014-10-03 00:40:16

回答

1

您可以将每个电话号码存储为一个整数,而不是保存数字。由于您已分配4位来保存0-10值,因此您正在浪费存储空间。另外,为什么有9位数字?不应该有10?

以可能的最大电话号码:999 999 9999(或在您的示例中,999 999 999),然后将其转换为基数2,以找出需要的最大位数。

此转换的结果是:

999 999 999 =  111011100110101100100111111111 base 2 (length 30) 
999 999 9999 = 1001010100000010111110001111111111 base 2 (length 34) 

因此,所有的数字可以使用每个30个或34位来存储,而不是36

计算的其余部分,你可以做你自己!

+0

您可能会发现它更容易做log2(9999999999) – par 2014-10-03 00:34:29

+0

然后知道每个电话号码的最大位长度为34,并且10000000000个可能的电话号码,则最小所需内存为(34 * 10000000000)位= 42500000000字节= 41503906.25 KB =〜40531.16 MB = **〜39.58 GB **。 – 2014-10-03 00:45:31

0

如果您只需要一组电话号码,即包含或不包含每个电话号码的数据结构,则您真正需要的是10^10位。如果第n位是1,则数字值为n的电话号码在该组中。否则它不是。全千兆字节超过10亿字节(大约1.074×10^9),所以10^10比特大约为1.164GB。

如果您需要了解更多关于电话号码的信息,当然需要更多的存储空间。

相关问题