1058 - 寻找最低数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

给你一个正整数A(1<=A<=100),输出A的最低数。
例如,给你A=26,我们可以将A化成二进制为11010,则A的最低数是10,输出10的十进制为2。
再例如,给你A=88,我们可以将A化成二进制为1011000,则A的最低数是1000,输出为8。

题目输入

输入包含多组测试样例。每行输入一个正整数A(1<=A<=100)。当输入0时,输入结束。

题目输出

对于每一个输入,输出对应的最低数。

输入/输出样例

输入格式

26
88
0

输出格式

2
8

C语言解答

#include<stdio.h>

int main()
{
	int n,i,j,t,k,a[10];
	while(scanf("%d",&n)!=EOF,n)
	{
		i=0;
		while(n)
		{
			a[i]=n%2;
			n/=2;
			i++;
		}
		t=0;
		for(j=0;j<i;j++)
		{
			if(a[j]==0)
				t++;
			else
				break;
		}
		k=1;
		for(j=0;j<t;j++)
			k*=2;
		printf("%d\n",k);
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	int n,i,j,t,k,a[10];
	while(scanf("%d",&n)!=EOF,n)
	{
		i=0;
		while(n)
		{
			a[i]=n%2;
			n/=2;
			i++;
		}
		t=0;
		for(j=0;j<i;j++)
		{
			if(a[j]==0)
				t++;
			else
				break;
		}
		k=1;
		for(j=0;j<t;j++)
			k*=2;
		printf("%d\n",k);
	}
	return 0;
}

Java解答

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNextInt()){
        int n=in.nextInt();
        if(n==0) break;
        String cc="";
        while(n!=0) {
                  int yushu = n % 2;
                  cc=(char)(yushu+'0') +cc;
                  n = n/2;
                }  
         int a=cc.length()-1;
         int b=0,sum=0;
          while(cc.charAt(a)=='0'){
             b++;a--;
            }
           sum+=Math.pow(2,b);
            System.out.println(sum);
        }
    }
}

Python解答

import sys
  
def check(N):
    n = len(bin(N))-bin(N).rfind('1')-1
    return int(('1'+'0'*n),2)
 
for line in sys.stdin:
    N = int(line.split()[0])
    if N != 0:
       print check(N)