如何计算2到2010的幂。数字的数量将超过32位,超过要存储的整数大小。不使用数组如何存储它。请帮我解释一下这个。
答案 0 :(得分:5)
2 2010 大于我们宇宙中的原子数 [1] 。
你需要一个像GMP和252字节的库来存储它。
[1]。 Matthew Champion,"Re: How many atoms make up the universe?",1998
答案 1 :(得分:2)
除非您使用的是具有2 ^ 2010位的架构,否则您将不得不将其存储在数组中。
二进制中的2的幂只是1,后跟0中的指数.2 ^ 2010将是2010年零的一个。分配数组以适应所有内容:
(2010+1) / (sizeof(unsigned int) * 8) //size of array
然后存储:
(1 << (2010 % (sizeof(unsigned int) * 8))
在最后一个元素中。
这是一个技巧问题然后将它存储在一个int中并说它是小端。
答案 2 :(得分:2)
如果您需要在不使用数组的情况下存储2到2010的功率,则可以使用浮点数来执行此操作,其格式允许指数很大。在IEEE-754类型中,这需要四倍精度的浮点数;因为那可能不可用,你可能需要自己动手。
然而,听起来你的任务是关于你对二进制数的了解,以及你是否可以提出一个非显而易见的问题解决方案而不是实际存储大数字。如果您只需要打印结果,并且(如评论中所述)找到位的总和,则无需为此烦恼。
首先,记住一下 - 二进制数字。每个比特是二进制数的一位,即基数为2的数字。对于一般数字(使用地点值,正如我们习惯的那样),每个数字代表与其位置对应的基数的某个幂的倍数。因此,在十进制(基数10)234
中,您有(4 * 10^0) + (3 * 10^1) + (2 * 10^2)
。在二进制文件中,1010
为(0 * 2^0) + (1 * 2^1) + (0 * 2^2) + (1 * 2^3)
。那么,如果每个数字(或位)对应2的幂,那么1
的位数2^2010
是多少?如果对应于每个位的2的幂匹配位位置的数量(从左开始计数,从零开始),哪个位将是1
?
至于显示数字,它很容易二进制......你应该从上面知道哪个位是1
,其余位是0
所以你可以打印它们从最大的开始。您根本不需要存储数字2 ^ 2010,因为您可以知道您需要多少位以及任何给定位是1
。您可以倒计算位位置,并为每个位置显示1
或0
,直到完成为止。
它在十六进制或八进制中也很容易,因为这些数字系统的基数是2的幂;这具有使这些系统中的每个数字完全对应于base-2中的特定大小的数字组的效果。因此,您只需要确定这些位如何与十六进制数字对齐,将每组位转换为数字,然后将其打印出来。
答案 3 :(得分:1)
使用对数进行计算,因此2^2010
在科学记数法中约为1.1756858319608366328144211980059e+605
。可以存储,或者在后一种情况下,它不是实用的方法!