解方程

解方程

Time Limit: 1000MS  Memory Limit: 65536KB
Problem Description

小璐有一天获得了一个形如 x | a = b的方程(a,b已知)

( |代表按位或)

她现在想要知道有多少个非负整数x能满足这个方程

聪明的你能帮帮她吗?

Input

多组输入,每组输入两个整数a,b

0<= a,b<= 10^8

Output

输出一个整数表示符合条件的非负整数解的个数

 

Hint:

对于第一组样例:1和3是符合条件的x。
对于第二组样例:1是符合条件的x。
对于第三组样例:没有符合条件的

 

Example Input
2 3
0 1
1 0
Example Output
2
1
0
#include<stdio.h>
#include<math.h>
#include<string.h>
int  fun(int *a,int n)
{
    int count = 0;
    while(n)
    {
        a[count++] = n %2;
        n=n/2;
    }
    return count;
}
int main()
{
    int a,b;
    int lena,lenb;
    int n,i,j;
    int a1[50],b1[50];
    int flag;
    while(~scanf("%d%d",&a,&b))
    {
        flag = 0;
        int sum = 0;
        int sum1=0;
        memset(a1,0,sizeof(a1));
        memset(b1,0,sizeof(b1));
       lena = fun(a1,a);
       lenb = fun(b1,b);

       if(lena>lenb)
       {
           flag=1;
       }

//       for(i=0;i<lenb;i++)
//       {
//           printf("%d %d\n",a1[i],b1[i]);
//       }
       for(i=0;i<lenb;i++)
       {
           if(a1[i]==1&&b1[i]==0)
           {
               flag=1;
               break;
           }

            if(a1[i]==1&&b1[i]==1)
                sum++;

       }
       //printf("sum = %d flag= %d\n",sum,flag);
       if(flag)
          printf("0\n");
       else
       {
           printf("%d\n",(int)pow(2,sum));
       }

    }
    return 0;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值