zoukankan      html  css  js  c++  java
  • JZ-C-10

    剑指offer第十题:位运算,判断二进制中1的个数

     1 //============================================================================
     2 // Name        : JZ-C-10.cpp
     3 // Author      : Laughing_Lz
     4 // Version     :
     5 // Copyright   : All Right Reserved
     6 // Description : 位运算
     7 //============================================================================
     8 
     9 #include <iostream>
    10 #include <stack>
    11 using namespace std;
    12 /**
    13  *位运算:
    14  */
    15 int Number(int n) {
    16     int count = 0;
    17     while (n > 0) {
    18         if (n & 1) { //和1(...01)相与运算,保证除最低位均为0,若最低位为1,则与运算结果为1,否则为0 ★★
    19             count++;
    20         }
    21         n = n >> 1; //将要判断的数右移一位(有可能出现死循环,如0X80000000 为负数,后移一位为0XC0000000(负数右移左端补1),最后变成0XFFFFFFFF,死循环···★★)
    22     }
    23     return count;
    24 }
    25 int Number1(int n) {
    26     int count = 0;
    27     int flag = 1;
    28     int time = 0;
    29     while (flag) {
    30         cout << "" << ++time << "" << endl;
    31         if (flag & n) {
    32             count++;
    33         }
    34         flag = flag << 1; //将flag左移,避免死循环。32位整数需要移位32次★★
    35     }
    36     return count;
    37 }
    38 int Number2(int n) {
    39     int count = 0;
    40     while (n) {
    41         ++count;
    42         n = n & (n - 1);// n-1:将从低至高位第一个1变为0,同时从低至高位第一个1后的所有0变为了1,n&(n-1):将从低至高的第一个1及其后面的数全部变为0 循环即可★★
    43     }
    44     return count;
    45 }
    46 int main() {
    47 //    cout << Number(0x80000000) << endl; //前面带0 表示八进制,前面带0x 表示十六进制
    48 //    cout << Number1(10) << endl; //前面带0 表示八进制,前面带0x 表示十六进制
    49     cout<<Number2(12)<<endl;//最优
    50     return 0;
    51 }

    另外:将十进制数转换为‘A-Z’进制数(excel列的计数方式)

     1 //============================================================================
     2 // Name        : ExcelNum.cpp
     3 // Author      : Laughing_Lz
     4 // Version     :
     5 // Copyright   : All Right Reserved
     6 // Description : 位运算
     7 //============================================================================
     8 
     9 #include <iostream>
    10 #include <stack>
    11 using namespace std;
    12 /**
    13  *输入十进制整数,返回A-Z进制数
    14  */
    15 char ExcelNum(int n) {
    16     char result = 0;
    17     if (n <= 0) {
    18         cout<<"错误"<<endl;
    19         return -1; //错误
    20     } else {
    21         std::stack<char> s;
    22         while (n > 0) {
    23             int remain = n % 26;
    24             remain == 0?remain = 26,n = n-1:NULL;
    25             result = remain + 64;
    26             n = n / 26;
    27             s.push(result);
    28         }
    29         cout<<"A-Z进制数为:"<<endl;
    30         while(!s.empty()){
    31             cout<<s.top();
    32             s.pop();
    33         }
    34     }
    35 
    36     return result;
    37 }
    38 
    39 /*int main() {
    40     ExcelNum(27);
    41     return 0;
    42 }*/
  • 相关阅读:
    深入理解redis数据类型
    js获取带#号链接后的参数
    js对象深拷贝与浅拷贝
    VUE + ElementUI 从搭建到运行
    python 输入一个整数,判断其是否既是3的倍数,又是5的倍数
    输入一个三位整数,顺序打印个位、十位、百位上的数
    python 输入三个整数,按照从小到大的顺序打印
    python 运算符与分支结构
    python 变量定义
    python 环境安装
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5530328.html
Copyright © 2011-2022 走看看