java-----------华为机试----------求int型正整数在内存中存储时1的个数 (水题for java)

来源:互联网 发布:安卓手机运行java应用 编辑:程序博客网 时间:2024/06/07 22:33

题目描述

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


输入描述:

 输入一个整数(int类型)



输出描述:

 这个数转换成2进制后,输出1的个数


输入例子:
5

输出例子:
2很简单啊,直接调用函数Interger.toBinaryString转为数字对应的二进制字符串;解法:
import java.util.Arrays;        import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        while(sc.hasNext()){            int num=sc.nextInt();            String str=Integer.toBinaryString(num);//调用默认函数,讲十进制转二进制            int len=str.length();//判断循环次数            int count=0;  //int 一个count作为计数器            for(int i=0;i<len;i++){                if(str.charAt(i)=='1'){  //每遇到一个‘1’,计数器count+=1;                    count++;                }            }            System.out.println(count);        }    }}
String str=Integer.toBinaryString(num);//10进制转2进制
Integer.toHexString(num);//10进制转16进制Integer.toOctalString(num);//10进制转2进制;
当然这不算通解,通解在这:
import java.util.Arrays;        import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        while(sc.hasNext()){            int num=sc.nextInt();            String s = Integer.toString(num, 2);            //Interger.toString(N,B),N为10进制数字,B为字符串内的进制            int len=s.length();//判断循环次数            int count=0;  //int 一个count作为计数器            for(int i=0;i<len;i++){                if(s.charAt(i)=='1'){  //每遇到一个‘1’,计数器count+=1;                    count++;                }            }            System.out.println(count);        }    }}



顺带说下,任意进制转10进制,java也是有自带方法的。
int i = Integer.parseInt("32", N);
Integer i = Integer.valueOf("32", N);

这题,我参考了http://blog.csdn.net/lzuacm/article/details/52691106的思想后,他说n&(n-1)的次数就是1的个数;
import java.util.Arrays;        import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        while(sc.hasNext()){            int num=sc.nextInt();            System.out.println(digitofNum(num));        }    }    public static int digitofNum(int n){        int count=0;        while (n!=0){            n=n&(n-1);            count++;        }        return count;    }}
虽然我不明白原理,但是还是先记住吧!不过时间,空间和第一种一样,都比第二种通用的要少,不过也没少太多10个测试,就少2ms。
0 0
原创粉丝点击