using System;
using System.Collections.Generic;


class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    public int NumberOf1 (int n) {
        // write code here
        int nFlag = n >= 0 ? 1 : -1;
        n = n * nFlag;
        int[] nArr = new int[32];
        Array.ForEach(nArr, r => r = 0);
        int nIndex = 0;
        while (n > 0) {
            nArr[nIndex] = n % 2;
            n = n / 2;
            nIndex++;
        }
        if (nFlag == -1) {
            int nC = 1;
            //nArr[31] = 1;//符号位
            for (int nIndexSec = 0; nIndexSec < 32; nIndexSec++) {
                int nTmp = nC + (nArr[nIndexSec] == 1 ? 0 : 1);
                nC = nTmp / 2;
                nArr[nIndexSec] = nTmp % 2;
            }
            nArr[31] = 1;
            //nArr[31] = (nC + nArr[31]) % 2;
        }
        return Array.FindAll(nArr, r => r == 1)?.Length ?? 0;
    }
}