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 }*/
  • 相关阅读:
    select选择框去掉默认的下拉箭头
    网站怎么添加ico小图标
    js实现逐字打印效果,文本逐字显示
    jQuery实现消息列表循环垂直向上滚动
    滤镜图片变黑白+图片模糊
    多选下拉框(select 下拉多选)
    JavaScript 数组相关基础方法
    h5+ IOS App中判断本地文件是否存在 plus.io.resolveLocalFileSystemURL()
    h5+ IOS App中取消视频默认全屏播放
    C# 多线程与队列操作小练刀
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5530328.html
Copyright © 2011-2022 走看看