给定一个数字N,找出一个数字M小于等于N,使得二进制位数与N的二进制位数相同,且M的二进制中所包含的1的个数最多,请输出最小的M.——Java实现

本文展示了一个Java程序,该程序接收一组整数输入,并处理每个整数的二进制表示。程序首先将整数转换为二进制字符串,检查是否全为1,如果不是,则进行特定的位操作来找到小于等于原数且具有相同二进制位数的1最多的数。

Java代码:

package com.renxia.java;

import java.util.*;

public class HelloWorld {
    public static void handle(int[]arr){

        for (int i : arr){
            String str = Integer.toBinaryString(i);
            System.out.println(i+"的二进制为: ");
            System.out.println(str);
            char[] chars = str.toCharArray();
            boolean bool = false;
            boolean all_1 = true;//判断是否为全1
            for (int j = 1;j<chars.length;j++){
                if (chars[j]=='0'){
                    all_1=false;
                }
            }
            if (all_1){
                System.out.println(i);
                continue;
            }
            for (int j = 1;j<chars.length;j++){

                if (bool){
                    chars[j]='1';
                }
                if (j<chars.length-1&&chars[j]=='1'&&!bool) {
                    chars[j] = '0';
                    bool=true;
                }
            }
            int i1 = Integer.parseInt(new String(chars),2);
            System.out.println("小于等于"+i+",且二进制位数相同的1最多的二进制是: ");
            System.out.println(Integer.toBinaryString(i1));
            System.out.println(i1);
            System.out.println("-----------------------------------------------");
        }

    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        int[] arr=new int[m];
        for(int i=0;i<m;i++){
            arr[i]=sc.nextInt();
        }

        handle(arr);
    }
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值