剑指Offer_编程题_11

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
 
class Solution {
public:
     int  NumberOf1(int n) {
         int size = 32;
         int flag=0;
         if(n<0){
             flag = 1;
             n=-n;
         }
         vector<int>vt(size);
         for(int i=0;i<size;i++){
             vt[i]=0;
         }
         int j=0;
         while(n>0){
             vt[j]=(n%2);
             n=n/2;
             j++;
         }
         if(flag == 1) {
             int i;
             for(i=0;i<size;i++){
                 vt[i]=(vt[i]+1)%2;
             }
             int index = 1;
             for(i=0;i<size;i++){
                 vt[i]=vt[i]+index;
                 index = vt[i]/2;
                 vt[i] = vt[i]%2;
             }
             vt[size-1]=1;
         }
         int sum = 0;
         for(int i=0;i<size;i++){
             if(vt[i]==1){
                 sum++;
             }
         }
         return sum;
     }
};

  

posted @ 2018-04-23 18:28  gaoren  阅读(118)  评论(0编辑  收藏  举报