nowcoder华为机试:求int型正整数在内存中存储时1的个数

来源:互联网 发布:atsl有obd端口吗 编辑:程序博客网 时间:2024/05/24 04:36

题目

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。


这是我想的办法(有点慢时间复杂度高):

import java.util.Scanner;public class Main{    public static void main(String[] args){        Scanner scanner = new Scanner(System.in);        String str = scanner.nextLine();        int num = Integer.valueOf(str);        String binary = Integer.toBinaryString(num);        int count = 0;        for(int i = 0; i<binary.length(); i++){            if(binary.charAt(i) == '1'){                count++;            }        }        System.out.println(count);            }}

这种方法是利用java提供的类函数,直接把数变为二进制表示再数个数。

还有一种方法是师兄想的,我写的代码:

import java.util.Scanner;public class Main {    public static void main(String[] args){        Scanner scanner = new Scanner(System.in);        String str = scanner.nextLine();        int num = Integer.valueOf(str);        int count = 0;        while(num != 0){            if((num & 1) == 1){                count++;            }            num = num>>1;        }        System.out.println(count);    }}

这种方法是利用在电脑里面存储的数本来就是二进制的,然后移位,与1相与,结果是1就是1,结果不是1就是0,这种方法快一些。

阅读全文
0 0