Leetcode刷题100天—P1048 二进制二(百度算法)—day46
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—P1048 二进制二(百度算法)—day46相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫运智
描述
二进制是计算机学科中广泛应用的一种数制, 用0和1两个数码来表示数字, 进位规则为"逢二进一"
用2整除十进制整数, 可以得到一个商和余数, 再用2去除商, 又会得到一个商和余数, 如此进行, 直到商为小于1时为止, 然后把先得到的余数作为二进制的低位有效位, 后得到的余数作为二进制的高位有效位, 依次排列起来
以13举例, 十进制13 = 二进制1101
13 ÷ 2 = 6 … 1
6 ÷ 2 = 3 … 0
3 ÷ 2 = 1 … 1
1 ÷ 2 = 0 … 1
在前n个正整数: 从1到n中, 二进制中数码"1"出现的次数最多的是哪个数? 如果有多个整数满足条件, 那么你需要输出最小的整数
格式
输入格式
输入仅包含一个非负十进制整数n (1≤n≤1015), 含义如题面所述
输出格式
输出一个正整数, 含义如题面所述
样例
输入样例
13
输出样例
7
限制
时间限制: 1000 ms
内存限制: 65536 KB
提示
对于第一个样例, 从1到13的所有整数中, 有3个整数: 7、11、13出现数码"1"的次数最多(3次), 其中最小的整数为7
package 百度算法;
import java.util.Scanner;
/*
* http://oj.importos.com/voj/p/1048
*/
public class _P1048_二进制二 {
public static void main(String args[]) {
// 可以按照规律判断,奇数肯定1多,且第二个奇数1多的是2*n-1,最多1的二进制:3,7,15,31,63,127,255
Scanner st=new Scanner(System.in);
Long i=st.nextLong();
Long j=(long) 3;
while(i>=j){
j=j*2+1;
}
System.out.print(j/2);
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—P1048 二进制二(百度算法)—day46的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—226. 翻转二叉树(二叉树)—day03
Leetcode刷题100天—226. 翻转二叉树(二叉树)—day03
Leetcode刷题100天—476. 数字的补数—day70
Leetcode刷题100天—476. 数字的补数—day70