Free pascal 题目

来源:百度知道 编辑:UC知道 时间:2024/06/03 11:18:05
输入一个整数A (1 <= A <= 100),转化为2进制后,取其最后的1后面的数(包括1),再转化为10进制得到Lowest Bit.

例如26,转化为2进制为11010,最后的1后面的数是10,转化为10进制得到2。

例如88,转化为2进制为1011000,最后的1后面的数是1000,转化为10进制得到8。

输入以0为结束。

Sample Input

26
88
0

Sample Output

2
8

完整程序如下:

program exp;
var x,i,m:integer;
begin
readln(x);
while x<>0 do
begin
m:=1;
i:=1;
while x and i=0 do
begin
i:=i*2;
m:=m+i;
end;
writeln(x and m);
readln(x);
end;
end.

程序对A没有限制,只要不超过INTEGER的限制均可(16位环境是32767,32位环境是2亿多),程序从输入数X的右边开始寻找不为0的二进制位,同时构建一个掩码M,最后输出那个数与掩码M的AND。不过说明到这里才发现,其实第I位右边都是0,其实就可以输出结果I,变量M都是多余的。