中易网

高分求一个C语言算法设计方法

答案:6  悬赏:40  
解决时间 2021-12-29 20:26
设计一个高效算法,计算两个64位二进制表示的正整数A和B有多少位是不同的。
最佳答案
#include
int main(void)
{
unsigned long long A,B,C;
int cnt=0;
scanf("%ld%ld",&A,&B);
C=A^B;//异或运算,不同位置一
do{
cnt+=(int)(C&1); //末位为1计数
C>>=C;//右移一位
}while(C); //全零结束
printf("number of diff bit:%d\n",cnt );
}
全部回答
如果要多次进行此运算,建议首先构造一个常量表,记录下8位二进制的数各有多少个1. #define N 8 int one[1 << N]; void make() { int i,j; for (i = 0; i < 1 << N; ++i) { j = i; while (j) { ++one[i]; j >>= 1; } } } int check64(unsigned long a,unsigned long b) { unsigned long c; int counter, d;; counter = 0; d = (1 << N) - 1; c = a^b; while(c) { counter += one[c & d]; c >>= N; } //这样,这个循环最多执行64 / N次 return counter; } 当check64调用次数很高时,此方法的对效率的改进很明显 设check64需要调用M次,则总复杂度为O(2^N*N+M * (64 / N)) 可根据M大小,适当选择N 另外,求一个二进制数1的个数,还有一种算法的复杂度正比于答案的: int one(int x) { int cnt = 0; while(x) { ++cnt; x &= x - 1; //这句话的意思是,每次去掉x的最低位的1 } }
C语言里头数都是32位的, 那么就应该分两次计算。 每次处理,就是把A的一半和B的一半"异或"(注:不是“与”,一楼写的是错的) 异或的英文xor. 然后把“异或”的结果一位一位统计是否为1, 统计的方法: 1. 可以是把数 R%2 (取模),就可以取出最低位,然后 R=R/2,重复32次就可以了。
ghostabe算法基本正确,可惜用了long long。 要注意long long是有符号的整形,万一a < b,那么while里a始终小于b。 从而a-b是负数 但注意,有些编译器(比如微软的VC/VS)会把(-3)%2算成-1。 因此(a-b)%2改成(a&b)&1比较好
int check64(unsigned long pa1,unsigned long pa2) { unsigned long tag; unsigned long mod = 1; int counter = 0; tag = pa1^pa2; while(mod) { if((mod&tag)>0) {counter++;} mod <<= 1; } return counter; }

#include<stdio.h> void main() { int i,n; i=0; scanf("%d",&n); while(n){ printf("%d",n%10); n/=10; i++; } printf("\n%d位数\n",i); }

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
袖罏的意思是什么?袖罏的释义是什么啊?
·从西稍门,旭景明园到陕西日报社(东南城角)
验功的意思是什么啊?请解释下!
拔剌的意思是什么?拔剌的释义是什么啊?
详细的可控硅整流器故障分析
漼然的意思是什么啊?请解释下!
芜蒌粥的意思是什么?芜蒌粥的释义是什么啊?
哪位清楚潍坊万达房价
广安门内开锁公司哪家好?广安门内开锁公司【
懨懨的意思是什么?懨懨的释义是什么啊?
翰院的意思是什么啊?请解释下!
康铜丝绕水泥电阻,铜丝直径与功率的关系
哪里有回收废旧滴灌带的今年旧滴灌带回收的价
为什么南方人总体比北方人聪明,不是所有人?
比较2/33/46/78/9的大小。你能发现什么规律,
推荐资讯
睚眥的意思是什么?睚眥的释义是什么啊?
层理的意思是什么?层理的释义是什么啊?
如何计算基础层防水面积
岳阳市玛丽外语培训学校地址在哪,我要去那里
东九省的意思是什么啊?请解释下!
百海教育远程教育多少钱一年?
显子岗社区居委会地址有知道的么?有点事想过
教师资格证不报培训班,自己学通过的几率大吗
为什么还是会在老公面前害羞?
掩庇的意思是什么?掩庇的释义是什么啊?
换笔记本的D壳难不难
混凝土浇筑(梁板)完成了,什么时候可以开始
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?