2807: 【例45.3】 寻找最低数
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:14
解决:10
题目描述
给你一个正整数$A$($1≤A≤2.1×10^9$),输出$A$的最低数。
例如,给你 $A=26$,我们可以将$A$化成二进制为 $11010$ ,则$A$ 的最低数是 $10$,输出 $10$ 的十进制为 $2$。
再例如,给你 $A=88$,我们可以将$A$化成二进制为 $1011000$,则$A$的最低数是$1000$,输出为$8$。
例如,给你 $A=26$,我们可以将$A$化成二进制为 $11010$ ,则$A$ 的最低数是 $10$,输出 $10$ 的十进制为 $2$。
再例如,给你 $A=88$,我们可以将$A$化成二进制为 $1011000$,则$A$的最低数是$1000$,输出为$8$。
输入
输入包含多组测试样例。每行输入一个正整数$A$($1≤A≤2.1×10^9$)。当输入 $0$ 时,输入结束。
输出
对于每一个输入,输出对应的最低数。
样例输入 复制
26
88
0
样例输出 复制
2
8
提示
根据计算机的补码的性质,补码等于原码的反码+1
-x = ~x + 1
例子:
x = (9)10 = 0000 1001
-x = 1111 0110 + 1 = 1111 0111
再做与操作,得0000 0001,这样就得到答案是1
x = (26)10 = 0001 1010
-x = 1110 0101 + 1 = 1110 0110
再做与操作,得0000 0010,这样就得到2
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
while(cin>>n){
if(n==0) break;
cout<<(n&(-n))<<endl;
}
return 0;
}