Given an positive integer A (1 <= A <= 100), output the lowest bit of A.
For example, given A = 26, we can write A in binary form as 11010, so the lowest bit of A is 10, so the output should be 2.
Another example goes like this: given A = 88, we can write A in binary form as 1011000, so the lowest bit of A is 1000, so the output should be 8.
Input
Each line of input contains only an integer A (1 <= A <= 100). A line containing "0" indicates the end of input, and this line is not a part of the input data.
Output
For each A in the input, output a line containing only its lowest bit.
Sample Input
26
88
0
Sample Output
2
8
———————————————————————————————————
题目的意思是给出一个n,求出n化为2进制后从低位开始第一个1代表的数
思路:无
AC代码1:化成2进制
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <functional>
#include <bitset>
#include <string>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
int main()
{
int n;
int a[100];
while(~scanf("%d",&n)&&n)
{
int len=0;
while(n)
{
a[len++]=n%2;
n/=2;
}
int ans=1;
for(int i=0;i<len;i++)
{
if(!a[i]) ans*=2;
else break;
}
printf("%d\n",ans);
}
return 0;
}
AC代码2:利用计算机补码快速算,树状数组原理
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <set>
#include <stack>
#include <map>
#include <functional>
#include <bitset>
#include <string>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
printf("%d\n",lowbit(n));
}
return 0;
}