高手请进!如何把一个很大的二进制数,以十进制表示出来?

来源:百度知道 编辑:UC知道 时间:2024/05/08 13:10:28
如何把一个很大的二进制数(用int[10]存储,一个int存32个bit),以十进制表示出来。
例如:2^315 = 66749594872528440074844428317798503581334516323645399060845050244444366430645017188217565216768

最好用c/c++,大家说说思路也行。
首先,非常感谢izat!你的意思是用万进制对吧?这个我知道。
我其实是想对int的每个bit都充分利用,也就是用2^32进制。
问题就是如何把一个2^32进制数表示成10进制数。请大家帮帮忙,好的话我会提高悬赏的。
我把int a[10]的每一个用逗号隔开,如
【123456789,0,10,0,0,0,0,1,0,10000】表示成十进制数=123456789*(2^32)^9+10*(2^32)^7+1*(2^32)^2+10000

不好意思我误解楼主的意思了...

不知道lz考虑过没有,2^32进制是基于2进制的,也就是说输出的时候按照万进制那样连在一起输出是不可行的,输出的不会是想要的结果.因为储存的数很大,那么要直接转换是肯定不可行的,这又需要一个基于10进制(比如万进制)的数组.所以,看起来用2^32进制是节省了内存,这也是你的本意,其实,它反而更加浪费了,不仅比用万进制多用了一个2^32进制的数组,输出时还多了一步转换.这是使用2^32进制的一个非常大的缺陷.

2^32进制还有很多别的毛病,比如每次升位肯定会越界因为你为了节省储存空间而没有留下余地.要是知道每次自乘升的位数(比如自乘2在2进制里是升一位)还可以进行强制升位,但要是是一个别的不是2的数呢?升位是无法预知的.

而如果真要使用2^32进制数组计算2^315,也无法达到对储存空间的充分利用,因为unsigned int 2^32输出的时候其实等于0,也就是说只有最高位a[n]有意义,其他的位a[n-1]到a[0]全部是0,根本没用.

代码我也没写了,因为有第一点输出问题,使用2^32进制根本没有起到充分利用储存空间的作用.

最后我想说的是,即使这样的算法真的能充分利用内存,但现在是内存烂大街的时代,用编写多余代码的时间加多余代码执行的时间换取这么一点内存空间不值得,时间永远是最宝贵的..

izat完成

我是这样想的,不知道对于否?
比如:a是你说的很大的二进制数,a&0xffffffff的值二进制转换为十进制存入i[0];
a右移32位再与0xffffffff,再将结果二进制转换为十进制存入i[1];
......
可是这个很大的数是怎么存储的,如果是8bit分别存储的时候,c语言的实现语句要不要和硬件结合?
二进制转十进制应该会吧?

0,1,2,3,4,5,6,7,8,9分别对应
000,001,010,011,100,101,110,111
9的话需要四位1000
1.二进制计数法的概念
人们在日常生活中和生产实践中,我们接触到越来越多的数字,创造了分组计数的制度.而