返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何计算二进制数中1的个数
  • 326
分享到

C++如何计算二进制数中1的个数

2024-04-02 19:04:59 326人浏览 独家记忆
摘要

目录计算二进制数中1的个数思路简单总结c++ 1的个数简单解法问题描述输入格式输出格式计算二进制数中1的个数 见到计算二进制数中的1的个数的比较精巧的做法,做个笔记(其实是

计算二进制数中1的个数

见到计算二进制数中的1的个数的比较精巧的做法,做个笔记(其实是之前被问到了,所以就查了下…

int CountOnes(int n) {
    int count = 0;
    while(n) {
        ++count;
        n = n & (n - 1);
    }
    return count;
}

刚看见时不太明白思路,然后自己拿笔随便划拉了下,算是搞明白了思路,简单总结一下。这个方法的主要思想就是找到当前数字中最靠右的1。

思路简单总结

n - 1(n不为0时)会使得n的最右侧第一个1以及该位的右侧的所有位取反,此时进行与操作,就会将该位置为0。

其实看上面那句话就行了,思路很简单,完全理解不了思路才需要看下面的:

大致上可以分成两种情况,当然事实上可以看成是同一种情况

  • 第一种:n的最右边是1。如果n最右边是1的话,n-1就只有最右边那一位变为0,此时n & (n - 1)就相当于是把n中右边第一位的1拿掉,比如n为0111时,n - 1就是0110,两者相与,结果就是n - 1,此时n - 1中1的个数比n中少1,且最右侧的位为0,已经转变为第二种情况。
  • 第二种:n的最右边是0。此时计算n - 1时,需要向上借位,一直借到n的最右侧的第一个1。例如n为1000时,n - 1就是0111,此时可以发现,n的第一个1的右侧的所有位都变成了1,并且原来是1的位变成了0。注意初始时n的第一个1的右侧的所有位都是0,计算n - 1后这些位都变成了1,此时再做与操作,这些位都会变成0。所以效果就是"n的右侧第一个为1的位被置为0"。

最后当n中不存在为1的位时,n的值等于0,while循环退出。这种做法相对于直接从右往左靠移位和与的做法来说更好一些,不需要遍历所有的位,也少了不少的判断,运行时间与n中1的个数相关。

C++ 1的个数简单解法

问题描述

输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。

例如15,那么从1到15之中,一共出现了8个1。

输入格式

  • 一个正整数n

输出格式

  • 一个整数,表示1出现的资料

样例输入

15

样例输出

8

数据规模和约定

  • n不超过30000
#include <iOStream>
using namespace std;

int main(){
    int n;
    int cnt = 0; //用来记录1的个数
    cin >> n;
    for(int i=1;i<=n;i++){
    int j = i; //j用来存放每次循环后更新过的i值
    while(j){ //循环依次对j的个位十位百位。。。位进行对一取余
        if(j%10==1){ 
            cnt++;    
        }
        j /= 10;
     }
    }
    cout << cnt << endl;
    return 0;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: C++如何计算二进制数中1的个数

本文链接: https://lsjlt.com/news/164973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++如何计算二进制数中1的个数
    目录计算二进制数中1的个数思路简单总结C++ 1的个数简单解法问题描述输入格式输出格式计算二进制数中1的个数 见到计算二进制数中的1的个数的比较精巧的做法,做个笔记(其实是...
    99+
    2024-04-02
  • C++实现十进制数转换为二进制数的数学算法
    一、十进制转换为二进制的数学算法 设目标十进制数为n,用短除法一直除以2,循环这个过程并记录余数,当商为0时结束循环,余数从后往前读就是转换为的二进制数 eg: 二、代码实现 1....
    99+
    2024-04-02
  • C++中的二进制函数详解
    C++中的二进制函数详解二进制函数是计算机科学中一类重要的函数,它们基于二进制操作,用于处理二进制数据。在C++中,二进制函数提供了丰富的功能,可以进行位操作、位移操作以及逻辑操作。一、位操作位操作是对二进制数据的每一位进行操作的方法。C+...
    99+
    2023-11-18
    二进制函数分析
  • C++ 函数库如何进行数学计算?
    c++++ 标准库中的 头文件提供丰富的数学函数,包括三角函数、双曲函数、指数和对数函数等。这些函数便于执行常见的数学运算,如计算圆的面积、勾股定理、求解二次方程以及查找极值。 C+...
    99+
    2024-04-18
    c++ 数学运算 标准库
  • C语言如何计算一个整数的位数
    目录计算一个整数的位数关于如何获取整数各个位然后知道通过 i/10 便可"清除"个位数计算一个整数的位数 只需要设计一个计时器,因为C语言中除法只留下整数部分,所...
    99+
    2022-11-16
    C语言整数位数 计算整数的位数 C计算一个整数位数
  • C#整数如何转二进制字符串
    这篇“C#整数如何转二进制字符串”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#整数如何转二进制字符串”文章吧。C# 整数...
    99+
    2023-07-05
  • php中二进制子串怎么进行计数
    这篇文章主要介绍php中二进制子串怎么进行计数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述:给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合...
    99+
    2023-06-20
  • 在计算机中一个字节所包含几个二进制位
    这篇文章主要介绍了在计算机中一个字节所包含几个二进制位的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇在计算机中一个字节所包含几个二进制位文章都会有所收获,下面我们一起来看看吧。在计算机中一个字节所包含二进制位的...
    99+
    2023-06-29
  • C语言如何计算两个数的最小公倍数
    目录C语言计算两个数的最小公倍数思路C语言求两个数的公倍数方案一方案二C语言计算两个数的最小公倍数 思路 最小公倍数是能同时整除两个数A,B的最小整数,可以慢慢从小到大寻找这个数: ...
    99+
    2022-11-16
    C语言最小公倍数 计算最小公倍数 两个数最小公倍数
  • C#中如何读取二进制文件
    C#中如何读取二进制文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#读取二进制文件当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧...
    99+
    2023-06-18
  • js如何操作二进制数据
    小编给大家分享一下js如何操作二进制数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先是新建一个socket:var&nbs...
    99+
    2024-04-02
  • javascript数值如何转换二进制
    本篇内容主要讲解“javascript数值如何转换二进制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript数值如何转换二进制”吧! ...
    99+
    2024-04-02
  • Python如何读取二进制数据
    在Python中,可以使用`open`函数来打开一个二进制文件,并使用`read`方法来读取二进制数据。下面是一个示例代码:```p...
    99+
    2023-09-08
    Python
  • c++中如何定义一个二维数组
    在 c++ 中定义二维数组时,需指定行数和列数:数据类型 数组名行数;使用大括号 {} 初始化元素,如:int matrix2 = {{1, 2}, {3, 4}};通过下标访问元素,例...
    99+
    2024-05-10
    c++
  • 枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
    最近有幸得到一个小小面试题,研究了研究,然后分享 出来,希望能对大家的代码事业有所帮助。 面试题是:求得1-1000所有出现1的数字,并计算出现1的个数 解法: 复制代码 代码如下:...
    99+
    2022-11-15
    枚举 出现1的个数 1-1000
  • C语言浮点数的二进制表示
    本篇内容介绍了“C语言浮点数的二进制表示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浮点数是属于有理数中某特定子集的数的数字表示,在计算机...
    99+
    2023-06-17
  • 在 Golang 中从 4、3 和 1 位数据创建 8 位二进制数据
    对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《在 Golang 中从 4、3 和 1 位数据创建 8 位二进制数据》,主...
    99+
    2024-04-05
  • 微型计算机中可以处理的二进制数据长度是多少位
    这篇文章将为大家详细讲解有关微型计算机中可以处理的二进制数据长度是多少位,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微型计算机中CPU进行算术运算和逻辑运算时,可以处理的二进制数据长度是32位、64位。...
    99+
    2023-06-14
  • mysql如何将数据转为二进制
    今天小编给大家分享一下mysql如何将数据转为二进制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • 计算机中进行数据运算的子系统是哪个
    这篇文章主要为大家展示了“计算机中进行数据运算的子系统是哪个”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“计算机中进行数据运算的子系统是哪个”这篇文章吧。计算机中进行数据运算的子系统是CPU,C...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作