zoukankan      html  css  js  c++  java
  • 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    写好了这篇博文我又想到。在java中数字的二进制的表示形式是:

    正数是用原码来表示的

    负数是用补码来表示的

    这道题的思路主要是打破自己的惯有的思维,其实我们可以看出10进制的数,我们完全可以当做二进制来使用。

    然后在转换成为二进制的时候,我们可以看到他是用了一个左移的操作,

    这个操作比我们传统的利用对二连除的方法要好的。然后我们用c++的方法进行求解得到的答案就是

    class Solution {
    public:
    int NumberOf1(int n) {
    int mark=0;
    int index = 1;
    while(index!=0){
    if((n&index)!=0)
    mark++;
    index=index<<1;
    }
    return mark;
    }
    };

    通过java写出的代码为

    思路为:先将数字转换为一个string类型的字符串,然后再将这个字符串转换为数组。然后

    对这个数字转换成的数组进行遍历。看里面有的1的个数,就可以了。

    public class Solution {
    public int NumberOf1(int n) {
    int number =0;
    String string=Integer.toBinaryString(n);
    char[]chars=string.toCharArray();
    for(char ch:chars){
    if(ch=='1')
    number++;
    }
    return number;
    }
    }

    c++和java其实代码写的在这道题中是都是适用的。两者的风格是非常的类似的

    最优解public static int NumberOf1(int n)

    { 

    int count = 0; while (n != 0) { ++count; n = (n - 1) & n; }

    return count;

    }

  • 相关阅读:
    29 求和
    28 跳转控制语句 goto
    27 跳转控制语句 continue
    26 跳转控制语句 break
    25 打印金字塔
    24 打印九九乘法表
    23 多重循环控制
    22 do-while 循环
    21 while 循环
    20 for循环控制
  • 原文地址:https://www.cnblogs.com/littleswan/p/11366327.html
Copyright © 2011-2022 走看看