登录
首页
电脑编程
回帖
发帖
正文
主题:一个简单却不知如何下手的问题,也许是智能问题,谁能破解?
点击:3173 回复:3
楼主
编辑
引用
管理
weeqeeyee
问题:一个90位的二进制数,如何快速确定其中“1”或“0”的个数?
要求:不用循环做,因为统计一次就来一个重复次数为90的循环,那么,我的程序中这个小操作涉及上百万次,效率太低。
求助:能不能对二进制数进行某些计算,直接确定答案?但我想了很久,想不出来。难道这是一个不可能的问题?谁能帮帮我?
05-09-21 08:46
1楼
编辑
引用
管理
吴辉
有意思,确定个数?
假设是一个"1",那90位的二进制就有90种表示,数值可以是
1,2,4,8,16,32,64......2^89
两个"1",排列组合就更多了
假设用除/减,其实也跟比较差不多了,那也用循环了,还是比较时间少
哪位知道!
05-09-21 12:26
2楼
编辑
引用
管理
吴辉
敢问老大,什么地方碰到这么个问题?**?
05-09-21 12:27
3楼
编辑
引用
管理
nyfuj
你的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
工控新闻
2025年工业机器人淘汰赛下生存现状:IPO、卖身与自救
光伏直流领域首个国际标准发布
西克前沿应用智享会 | 托盘是否归位?
西克2025新品 - 绝对值编码器 ANS/ANM58 Profinet
西克2025新品 - IO-Link 智能网关 SIG300
西克光学符号识别 (OCR) 与工业图像处理技术的强大组合
“人形机器人第一股”再度融资超24亿港元!
埃夫特登上央视《经济半小时》!聚焦制造业高端化、智能化、绿色化发展
更多新闻资讯