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

如何把一个很大的二进制数(用int[10]存储,一个int存32个bit),以十进制表示出来。例如:2^315=66749594872528440074844428317... 如何把一个很大的二进制数(用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
展开
 我来答
izat
2007-07-31 · 超过17用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:48.3万
展开全部
不好意思我误解楼主的意思了...

不知道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完成
侍幼白gJ
2007-07-25 · TA获得超过846个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:313万
展开全部
0,1,2,3,4,5,6,7,8,9分别对应
000,001,010,011,100,101,110,111
9的话需要四位1000
1.二进制计数法的概念
人们在日常生活中和生产实践中,我们接触到越来越多的数字,创造了分组计数的制度.而我们的生活中,一般采用了"满十进一"的十进制计数法,我们现在已经熟悉并经常运用这一种计数法了.但也有采用其他计数法.如二进制,六进制,十六进制等计数法.现在就来讲一讲"二进制"和"十进制"的关系
2.十进制和二进制数的互化
(1)化十进制数为二进制数
<1>比较小的十进制数为二进制数可以用观察法.
例:化45为二进制数
因为2的0次方,1次方,2次方~~~10次方分别等于1,2,4,8,16,32,64,128,256,512,1024.
所以 45=32+8+4+1=2⑤+2③+2②+1=1*2⑤+0*2④+1*2②+0*2①+1*1=101101(二进制)
<2>一般化法
利用短除法(通常叫做"二除取余法")
(2)化二进制数为十进制数
这是比较方便的,只需把二进制是写成展开式;计算即得.
例1 化101101(二进制)为十进制数.
101101(二进制)=1*2⑤+0*2④+1*2③+1*2②+0*2①+1*1=32+0+8+4+0+1=45
例 2 化1011010101(二进制)为十进制数.
1011010101(二进制)=1*2⑨+1*2⑦+1*2⑥+1*2④+1*2②+1*1=512+128+64+16+4+1=725
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天山雪莲_ok
2007-07-29
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
我是这样想的,不知道对于否?
比如:a是你说的很大的二进制数,a&0xffffffff的值二进制转换为十进制存入i[0];
a右移32位再与0xffffffff,再将结果二进制转换为十进制存入i[1];
......
可是这个很大的数是怎么存储的,如果是8bit分别存储的时候,c语言的实现语句要不要和硬件结合?
二进制转十进制应该会吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f8b8c6979
2007-07-26 · TA获得超过561个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:0
展开全部
你的初衷 是 想对int的每个bit都充分利用
我想了一下,要打印出来,还非得另外搞个大数组不停地累加,而且还容易出错,所以这样反而更复杂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式