登录
首页 电脑编程
回帖 发帖
正文

主题:一个简单却不知如何下手的问题,也许是智能问题,谁能破解?

点击:3164 回复:3

问题:一个90位的二进制数,如何快速确定其中“1”或“0”的个数?
要求:不用循环做,因为统计一次就来一个重复次数为90的循环,那么,我的程序中这个小操作涉及上百万次,效率太低。
求助:能不能对二进制数进行某些计算,直接确定答案?但我想了很久,想不出来。难道这是一个不可能的问题?谁能帮帮我?
05-09-21 08:46
有意思,确定个数?
假设是一个"1",那90位的二进制就有90种表示,数值可以是
1,2,4,8,16,32,64......2^89
两个"1",排列组合就更多了
假设用除/减,其实也跟比较差不多了,那也用循环了,还是比较时间少
哪位知道!
05-09-21 12:26
敢问老大,什么地方碰到这么个问题?**?
05-09-21 12:27
你的90位二进制是如何存贮的,用一维数组吗?
如果是存在12个整型变量里,一个整型变量存8位二进制。
形如:abcd efgh ijkl
     (每个字母代表一个8位二进制)
那么,分别求出这12个整型变量中的1或者0的个数,相加即可得。
求出整型变量中的1或者0的个数的方法:
定义一个一维数组并按以下方法赋值
其中A[i]=j
i:对应为一个二进制数(转换成十进制,方便理解)
j:对应"i"中1的个数。(这里不要表示为0的个数)
也就是说这个一维数组下标i是上文的整型变量,值是个数,
如:A[0]=0
   A[1]=1
   A[2]=1
   A[3]=2
   A[4]=1
   A[5]=2
   A[6]=2
    ...  
例:
 s=A[a]+A[b]+A[c]+A[d]+A[e]+A[f]+A[g]+A[h]+A[i]+A[j]+A[k]+A[l]
 
不知我说清楚没有,呵呵。
最后修改:2005-10-15 20:21:53
05-10-15 18:58

工控新闻

更多新闻资讯