求整数中出现1的个数

求小于等于N的所有正整数里面包含的1的个数 题目: 已知一个正整数N,求比N小(包括N)的所有正整数中包含的1的个数。例如N = 12,则包含5个1,分别为1、10、11、12 解答: 最直观最简单的想法是,从1到N对每一个数检查,得出每个数中包含的一的个数,事件复杂度大概是O(N)1时间复杂度比较高,不是最优算法。一个比1快的算法是:对N的每一位进行检查,得出比N小的正数某一位包含的1的个数总和。比如1234,千位包 阅读详情

题目:求整数中出现1的个数

求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

题目思路

case 1: cur=0
数字为:2 3 0 4
千位和百位可以选00 01 02…22 十位可以取到1( 形如[00|01…|22]1[0-9] 都是<2304 ) 个位可以选0-9 共有 23 * 10 中排列
当千位和百位取 23,如果十位取1 那就是形如 231[0-9] > 2304,所以当千位和百位取23,十位只能能取0,个位取0-4即 2300 2301 2302 2303 2304
但是2301不应该算进来,这个1是 单独 出现在个位的(而11,121,111这种可以被算多次)
即 23*10
case 2: cur=1
数字为:2 3 1 4
千位和百位可以选00 01 02…22 十位可以取到1 个位可以选0-9 共有 23 * 10 中排列
当千位和百位取23,十位取1,个位可以去0-4 即 2310-2314共5个
即 23 *10 + 4 +1
case 3: cur>1 即2-9
数字为:2 3 2 4
千位和百位可以选00 01 02…22 十位可以取到1(形如 [00|01…|22]1[0-9] 都是<2324) 个位可以选0-9 共有 23 * 10 中排列
当千位和百位取23,十位取1,个位可以去0-9 即 2310-2319共10个 (其中2311,被计算了两次,分别是从个位和十位分析得到的1次)
即 23 *10 + 10
其实不能理解的话就把cur位想象成一个密码锁,固定cur位,转动high和low位。

class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        high,cur,low = n // 10, n % 10, 0
        digit,result = 1,0
       	#if判断条件都是总结出来的规律
        while high != 0 or cur != 0:
            if cur == 0:
                result = result + (high * digit)
            elif cur == 1:
                result = result + (high * digit + low + 1)
            else:
                result = result + ((high + 1) * digit)
            low+=cur*digit
            cur = high % 10
            digit*=10
            high//=10
        return result

链接: 力扣上的解答链接.

快速求一个32位无符号整数二进制中为1的个数 一个数5,二进制表示法,为101,则有2个1,如何快速求出一个32位无符号整数中1的个数,如果要我们来做,我们可能会进行一个32次的循环,从1至32,依次测试相应的位;这个算法不是最优的。以下算法效率的要快很多:http://aggregate.ee.engr.uky.edu/MAGIC/。源代码如下 unsigned int ones32(register unsigned int x) { /* 32-bit recursive reduction using SWAR... 阅读详情

相关推荐

求一个整数,在内存中存储时,二进制1的个数(两种方法)

方法一:移位法 数字n每次与1进行按位与,可知道最后一位是否为1,然后在让n无符号右移。 public static void main(String[] args) { //求一个整数,在内存当中存储时,二进制1的个数 Scanner num = new Scanner(System.in); int i = num.nextInt(); int count = 0; while (i != 0) { if ((i & 1) == 1) {

ImwaterP的博客 1147

0到一个数中有多少个整数包含1 初入新手,不喜勿喷

给定一个十进制正整数n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。一个正整数,即“1”的个数。...

XXxuXiAoQi的博客 526

经典面试题(1):统计整数中1的个数

题目:给定一个无符号32位整数num,求num的二进制表示法中含1的个数。提供了8中实现方式。

算法练习篇之:整数中1出现的个数

算法练习篇之:整数中1出现的个数 题目描述解题思路代码实现总结 题目描述 求出1 ~ 13的整数中1出现的次数,并算出100~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 解...

香农三定律的博客 901

训练AI:从数据收集到模型部署的完整指南

如果你刚开始接触AI,建议先学习一些基础的编程和机器学习知识,还可以使用现成的AI平台和工具来帮助你训练AI模型。在这篇文章中,我们将详细探讨从数据收集到模型部署的完整步骤,并提供一些有用的技巧和工具,以帮助你成功地训练自己的AI模型。在收集数据时,你需要从可靠的数据源(如数据仓库、数据集市、API接口)获取数据,确保数据的准确性和完整性。常用的划分比例是70%的数据集用于训练模型、15%的数据集用于验证模型,5%的数据集用于超参数调整,最后10%的数据集用于测试模型的性能。测试数据集用于测试模型的性能。

a_wsnd的博客 4165

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

【C语言】求一个整数的二进制序列中1的个数的三种方法

详解了关于"求一个整数的二进制序列中1的个数"的三种方法,其中包括逐位%2法,逐位&1法和n&(n-1)法,包含图解,简明生动.

C/C++领域,数据结构,linux,MySQl学习者 1687

对E-R模型向关系模式转换的认识

一:基本E-R图的转换 1     属性处理 派生属性:直接忽略。 复合属性:展平技术。 多值属性:单独建立一个关系表,关系名就是多值属性名,如果是实体集的多值属性,关系的属性就是实体集的码加上多值属性,如果是联系集的多值属性,关系的属性就是各个实体集的码加上多值属性,关系的码要具体情况具体分析。 2     基本E-R图转换为关系模式 强实体集:一个关系,关系名就是强实体集名,关系属

优快云_LYY的专栏 2731

计算整数中值为1的位的个数

计算一个整数(无符号)中值为1的位的个数 算法1:逐位右移,利用最后一位是1则是奇数的特性判断: int count_one_bits(unsigned value) { int ones; for(ones = 0; value != 0; value = value >> 1) { if (value % 2 != 0) { ones++; } } return ones; } int main(

Turtle's trail 782

人工智能训练师技能等级认定四级技能考核试卷-样题4

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总时长150分钟。考核内容涵盖:1)车牌数据集规范评估与格式处理;2)车牌数据集采集代码修改与数据处理;3)房价预测数据集加载、预处理与可视化分析;4)车牌标注数据集审核与修正;5)螺丝螺母检测数据集的平台创建与共享;6)螺丝螺母数据的去噪处理与标注优化。要求考生使用Python编程、数据处理平台和标注工具完成各项任务,重点考察数据加载、格式转换、缺失值处理、数据可视化、标注审核及平台操作等技能。所有操作需在配备Python3.7和深度学习平台的W

weixin_42221934的博客 348

别再只插线了!用示波器‘偷看’USB-C PD协议握手全过程(附BMC/4B5B编码解析)

本文详细介绍了如何使用示波器捕获并解码USB-C PD协议的握手过程,包括BMC/4B5B编码的解析技巧。从硬件配置到波形分析,再到协议注入,为工程师提供了一套完整的实战解码手册,帮助深入理解PD协议的工作原理。

weixin_42526417的博客 401

位与:一个数&1的结果

在计算机中,位与的符号是&,运算过程是false&false=false, true&false=false, true&true=true 故任何一个数&1的结果有: 0&1=0 1&1=1 2&1=0 3&1=1 … … … 1234&1=0 4321&1=1 可以看出一个奇数(十进制)位与1的结果是1,一个偶数(十进制)位与1的结果是0 我们分析一下几个例子,3和987都是十进制数: 3&1在计算过程是:

科技向善 1万+

光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件

软件界面如下,免安装,拷贝即可使用 导入光谱数据即可计算三刺激值、CIE1931、CIE1976、CCT CIE1931、CIE1976色坐标图形只管显示 导入的光谱数据格式如下,txt文本 波长380到780,间隔1nm 注意:缺省的数据默认写0即可 下面为一些CIE相关介绍: CIE(国际发光照明委员会):原文为Commission Internationale de L’Eclairage(法)或International Commission on Illumination(英)。这个委员会创

业余程序员小徐的博客 2万+

求1到n的所有正整数中,有多少个数的约数个数是奇数

Description hry在学小学数学的时候就在琢磨一个问题。。1到n的所有正整数中,有多少个数的约数个数是奇数? Input 第一行有一个正整数T,表示有T组测试数据。 每组测试数据一行一个正整数n. (1&lt;=T&lt;=10000,1&lt;=n&lt;=1000000000000000000) Output 每组数据输出一行一个整数,表示1-n...

ax478的博客 2750

【乐企】有关乐企能力测试接口对接-基础版(详细)

乐企能力测试接口对接详细代码以及步骤

九七的博客 7655

《YOLOv8:从入门到实战》报错解决 & 专栏答疑

《YOLOv8:从入门到实战》专栏上线后,部分同学在学习过程中提出了一些问题,笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容,笔者特意推出了该篇专栏答疑,针对同学们在学习过程中所提出的问题进行汇总记录,并不断实时更新,希望能够帮助到大家!🌈

小哥谈 1240

求一个整数存储在内存中的二进制中1的个数

题目:求一个整数存储在内存中的二进制中1的个数 方法一: int num = 10; int count = 0;//计数 while (num) { if (num % 2 == 1) count++; num = num / 2; //等价于:num = num &gt;&gt; 1; } printf("二进制中1的个数为:%d\n", count); 这个是比较...

身在边城 心在编程 370

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C语言 求一个整数存储在内存中的二进制中的1的个数

通过以上,我们得知新的n和老的n相比,二进制数位上的1在逐渐的减少,并且是从右往左的方向以此减少,所以,我们可以得到一个规律,n = n & (n-1) 在不断的减少二进制位数上的1.而将一个整数各个位数分离的方法,我们可以采用先 %10 后 /10的方法,前者取出最低位的数字,后者去除最低位的数次,并加以循环,我们便可以得到一个整数的所有位数。通过题目我们可知,一个整数在内存中的二进制数位是这个整数的补码,因此求的是这个整数的补码中的1的个数。求一个整数存储在内存中的二进制中的1的个数。

2301_76445610的博客 329

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java求一个整数的二进制1的个数,求两个整数二进制位不同的个数,打印一个整数的二进制的所有奇数位和偶数位

求一个整数的二进制1的个数 求两个整数二进制位不同的个数 打印一个整数的二进制的所有奇数位和偶数位

傻子编程 306

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

求一个整数储存在内存中的二进制的1的个数

/00000000 00000000 00000000 00000001/因为按位与是都为1才为1,通过数按位与1可以判断该数的末位的数为1还是0。//00000000 00000000 00000000 00000011 3在内存中的补码。printf("该整数的二进制在内存中1的个数为%d", count);printf("该整数的二进制在内存中1的个数为%d", count);printf("请输入一个整数\n");//求一个整数储存在内存中的二进制的1的个数。//求补码中1的个数。

2401_86652180的博客 337

C++ - 求一个正整数的二进制表示中1的个数

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /* * Created by Chimomo */ #include &lt;iostream&gt; #define NULL 0 using namespace std; int f(int x) { int n = 0...

了解➔熟悉➔掌握➔精通 6万+

求一个整数二进制中1的个数(三种方法详解)

当涉及到二进制时就要想到按位操作符,右移左移操作符了,同时也可以在有时间的情况下探索一下是否有更多思路。

2301_79551553的博客 951

求整数 1-n 总共出现1的个数 及 求整数的二进制中1的个数

继之前博文的补充(求整数位数,正序逆序输出,总计1的个数)https://blog.youkuaiyun.com/TUJI67/article/details/80381306 //todo 求1,2,3,4...总共出现1的个数 例如n=12(1,10,11,12),返回5个 //从1开始除以10取余,若余数为1,计数器加一,直到n取余为0结束,返回计时器即为所求。 int CountAlldOne(i...

TUJI67的博客 889

HJ15 求int型正整数在内存中存储时1的个数(Java版)

∙ ∙十进制(10)10(10)10​等于二进制(1010)2(1010)2​。∙ ∙十进制(8)10(8)10​等于二进制(1000)2(1000)2​;∙ ∙十进制(9)10(9)10​等于二进制(1001)2(1001)2​;∙ ∙十进制(2)10(2)10​等于二进制(10)2(10)2​;∙ ∙十进制(3)10(3)10​等于二进制(11)2(11)2​;∙ ∙十进制(1)10(1)10​等于二进制(1)2(1)2​;

徐泗空的博客 633

三种方法:求一个整数在二进制中1的个数

编写代码实现:求一个整数在二进制中1的个数 #include <stdio.h> #include <windows.h> //方法1 int main() { int num = 10; int count = 0; //计数 while (num) { if (num % 2 == 1) { count++; } num /= 2; ...

didi1663478999的博客 578
上一篇: pytorch的gather函数的一些粗略的理解
下一篇: Java反射机制访问类的私有方法
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值