java:二进制数数
题目
问题描述
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。
输入格式
第一行包含2个数L,R
输出格式
一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入
2 3
样例输出
3
思路
首先化为二进制
之后再数1,
数1的个数可以参照之前有个题目“1的个数”
如果求二进制可以依据之前的递归求二进制位数这一题
import java.util.Scanner;
public class 二进制数数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
sc.close();
int count=0,m,n;//初始化
for(int i=a;i<=b;i++){
m=i;//在一的个数里面也有将,为了不改变i的值
while(m!=0){//只要你求出有多少个1,并没有要你求出具体的值
n=m%2;//求余数
if(n==1) count++;
m/=2;//删除最后一位
}
}
System.out.println(count);
}
}