番号がメモリに格納されている場合、INT型の正の整数を求めて1

https://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9?tpId=37&tqId=21238&tPage=1&rp=&ru=%2Fta%2Fhuawei&qru=%2Fta%2Fhuawei%2Fquestion-ranking

 

一つ、タイトル説明

正の整数int型を入力し、INTはメモリ1に格納されるデータの種類の数で計算されます。

 

第二に、コードの実装

入力が正の数である場合は、そのことが(左の負の数の高い補数は、操作が行われた>> 1)0高の左側に追加します。、右のいずれかに>>>を使用する必要があります。

import java.util.Scanner;
//遍历次数为最左边的1所在位置(最右边的位为第一个)
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while (sc.hasNextInt()) {
            int input = sc.nextInt();
            
            int countOfOne = 0;
            while (input > 0) {
                //if (input%2 == 1) {
                //
                //if (input & 1 == 1) {
               //error: bad operand types for binary operator '&'
                if ((input & 1) == 1) {
                    countOfOne++;
                }
                //input = input / 2;
                //
                //input = input >> 1;
                //如果输入可以是负数,那么这里必须使用>>>
                input = input >>> 1;
            }
            
            System.out.println(countOfOne);
        }
        
    }
}

もう一つの方法:

import java.util.Scanner;
//迭代次数为二进制中为1的位的个数
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while (sc.hasNextInt()) {
            int input = sc.nextInt();
            
            int countOfOne = 0;
            while (input > 0) {
                countOfOne++;
                input = input & (input - 1);    //每一次消去最低位的1,有多少个1就迭代多少次
            }
            
            System.out.println(countOfOne);
        }
    }

}

APIは、文字列のバイナリ整数表現を使用して得られました:

import java.util.Scanner;
//遍历次数为最左边的1所在位置(最右边的位为第一个)
public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while (sc.hasNextInt()) {
            int input = sc.nextInt();
            String binaryStr = Integer.toBinaryString(input);
            
            int countOfOne = 0;
            //for (int i=0; i<32; i++) {
            //存在数组越界等非法访问情况
            for (int i=0; i<binaryStr.length(); i++) {
                if (binaryStr.charAt(i) == '1') {
                    countOfOne++;
                }
            }
            
            System.out.println(countOfOne);
        }
    }
}

 

公開された62元の記事 ウォン称賛30 ビュー30000 +

おすすめ

転載: blog.csdn.net/sinat_30973431/article/details/104045716