Count the number of 1s in an binary integer

Solution

int oneInBinaryInt(int num) {
    int cnt = 0;
    int mask = 1;
    while (num > 0) {
        if (num & mask) {//'1' is the last digit
            cnt++;
        }
        num = num >> 1; //num/2, check next digit
    }
    return cnt;
}

上述的方法是不能应用于负数的情况的。。。下面这个是更general的方法:

int countOnes(int input){
        int count = 0;
    for (int i = 0; i<32; i++){
        if ((input & 1) != 0) count++;
        input >>= 1;
    }
    return count; 
}

下面是int to binary和binary to int的方法

//
string binaryString(int num) {
    string b_str="";
    int mask = 1;
    while (num > 0) {
        char c = num&mask ? '1' : '0';
        b_str.push_back(c);
        num = num >> 1;
    }
    reverse(b_str.begin(), b_str.end());
    return b_str;
}
int binaryInt(string s) {
    int num = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == '1') {
            num += (1 << (s.length() - i - 1));
        }
    }
    return num;
}

同样上面的方法也是没有考虑到负数的。。。

string binaryString(int num) {
    string b_str="";
    int mask = 1;
    for(int i=0; i<32; i++ {
        char c = num&mask ? '1' : '0';
        b_str.push_back(c);
        num = num >> 1;
    }
    reverse(b_str.begin(), b_str.end());
    return b_str;
}

但是这样改了以后吧,如果是整数的话前面会有好多的0.。。

results matching ""

    No results matching ""