整数A和B的二进制表示有多少位不同

View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int a, b;
 9     int p1, p2;
10     int rlt;
11 
12     while(scanf("%d%d",&a,&b)!=EOF)
13     {
14         rlt=0;
15         while(a!=0 && b!=0)
16         {
17             p1=a-(a&(a-1));  //p1为第一次出现一的位置
18             p2=b-(b&(b-1));
19             if(p1==p2)
20             {
21                 a&=(a-1);
22                 b&=(b-1);
23             }
24             else
25             {
26                 rlt++;
27                 if(p1<p2)
28                 {
29                     a&=(a-1);
30                     p1=a-(a&(a-1));
31                 }
32                 else
33                 {
34                     b&=(b-1);
35                     p2=b-(b&(b-1));
36                 }
37             }
38         }
39 
40         while(a!=0)
41         {
42             a&=(a-1);
43             rlt++;
44         }
45         while(b!=0)
46         {
47             b&=(b-1);
48             rlt++;
49         }
50         printf("%d\n",rlt);
51     }
52 
53     return 0;
54 }

转载于:https://www.cnblogs.com/eric-blog/archive/2012/08/06/2625684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值