解方程

来源:互联网 发布:电信网络登录 编辑:程序博客网 时间:2024/09/21 09:21

Problem Description

小璐有一天获得了一个形如 x | a = b的方程(a,b已知)
( |代表按位或)
她现在想要知道有多少个非负整数x能满足这个方程
聪明的你能帮帮她吗?

Input

多组输入,每组输入两个整数a,b
0<= a,b<= 10^8

Output

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

Example Input

2 30 11 0

Example Output

210

Hint

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

对于第三组样例:没有符合条件的




#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int fun(int *a,int n)
{
    int count=0;
    while(n)
    {
        a[count++]=n%2;//记录每位数;
        n/=2;
    }
    return count;//返回一共有有多少位;
}
int main()
{
    int a,b;
    int l,l1;
    int a1[50],b1[50];//记录每个数换成二进制的逆序数;
    int flag;
    while(cin>>a>>b)
    {
        flag=0;
        int sum=0;
        int sum1=0;
        memset(a1,0,sizeof(a1));
        memset(b1,0,sizeof(b1));
        l=fun(a1,a);
        l1=fun(b1,b);
        if(l>l1)//数大;
            flag=1;
            for(int i=0;i<l1;i++)
            {
                if(a1[i]==1&&b1[i]==0)//不符合条件则退出循环;
                  {
                      flag=1;
                     break ;
                  }
                  if(a1[i]==1&&b1[i]==1)//只要符合规律则成立;
                      sum++;
            }
            if(flag)
                cout<<"0\n";
            else
                cout<<pow(2,sum)<<endl;//求2的sum次;
    }
    return 0;
}


0 0