统计1的个数

简介:
复制代码
#include <iostream>
#include <string>
using namespace std;

/************************************************************************/
/* 输入一个数字N,计算从1到N 这N个数字中1出现的次数
例如
N = 2,   则1 2中1出现的次数为1
N = 12, 则 1 2 3 4 5 6 7 8 9 10 11 12 中1出现的次数为5。
求任意给一个N返回1的个数。
1、暴力解法,从1遍历到N,求出每一个数字中1的个数,然后相加之和即为总共1的个数。
2、分析:分析每一位出现1的次数,总和即为总共1出现的次数

1位数时,N>=1, f(N)=1 当N<1 ,f(N)=0;
2位数时,假设ab为一个二位数;
分析个位b:个位1的个数为 a
分析十位a:十位1的个数,若a=1, 十位1的个数为b+1,若a>1,则十位1的个数为10


*/
/************************************************************************/
/*
输入一个整数N,求1 2 3 。。。N中含有1的个数
*/
int countOnes(int N)
{
    int iCount = 0;
    int iFactor = 1;
    int iLowerNum = 0;
    int iCurrNum = 0;
    int iHigherNum = 0;
    while(N/iFactor)
    {
        iLowerNum = N - (N/iFactor)*iFactor;
        iCurrNum = (N/iFactor)%10;
        iHigherNum = N/(iFactor*10);
        switch(iCurrNum)
        {
        case 0:
            iCount += iHigherNum*iFactor;
            break;
        case 1:
            iCount += iHigherNum*iFactor + iLowerNum +1;
            break;
        default:
            iCount += (iHigherNum+1)*iFactor;
            break;
        }
        iFactor *= 10;
    }
    return iCount;
}

int main(int argc, char **argv)
{
    int N;
    cin>>N;
    cout<<countOnes(N)<<endl;

    return 0;
}
复制代码

 










本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3952159.html ,如需转载请自行联系原作者

相关文章
|
8月前
|
Linux
Linux目录删除指南:彻底解决“Is a directory”错误
在 Linux 系统中遇到 `cannot remove &#39;xxx&#39;: Is a directory` 错误,是因为删除目录时未使用正确参数。解决方法包括:1) 使用 `rmdir` 删除空目录或 `rm -r` 删除非空目录;2) 检查并调整目录权限(如通过 `sudo` 提权);3) 处理特殊场景,例如文件属性异常、特殊字符或进程占用;4) 替代方法如 `find -delete` 或文件系统修复。操作前建议备份数据,并启用防误删功能(如 `alias rm=&#39;rm -i&#39;`)。掌握 `rm` 和 `rmdir` 的区别是关键。
704 1
|
11月前
|
JavaScript 容器
jQuery文字跑马灯插件Marquee
jQuery.Marquee是一款jQuery文字跑马灯插件。jQuery.Marquee跑马灯插件可以结合使用CSS3动画,制作文字的上下左右移动效果。
|
11月前
|
人工智能 自然语言处理 前端开发
【AI系统】LLVM 前端和优化层
本文介绍了 LLVM 编译器的核心概念——LLVM IR,并详细讲解了 LLVM 的前端 Clang 如何将 C、C++ 等高级语言代码转换为 LLVM IR。文章还探讨了编译过程中的词法分析、语法分析和语义分析三个关键步骤,以及 LLVM 优化层的 Pass 机制,包括分析 Pass 和转换 Pass 的作用及依赖关系。
262 3
|
运维 监控 负载均衡
简述构建微服务架构的四大挑战
【2月更文挑战第29天】这篇内容讲述了微服务架构带来的四大挑战:1) 服务拆分涉及粒度、兼容性等问题,需谨慎处理;2) 开发中需建立服务标准化方案,应对分布式通信的复杂性;3) 测试环境搭建、测试确定性、非功能测试和自动化测试都更具复杂性;4) 运维方面,监控、问题排查、依赖管理和容量管理变得更加复杂。解决这些挑战,尤其是构建自动化运维基础设施,对实现微服务架构的成功至关重要。
|
12月前
|
缓存 NoSQL 网络协议
【Azure Redis】因为Redis升级引发了故障转移后的问题讨论
3:对于Redis的Server Load指标,每秒创建连接数的并发值,是否有建议呢? 【答】:为了避免将缓存推到 100% 服务器负载,建议将连接创建速率保持在每秒 30 个以下。
119 0
|
存储 算法 数据可视化
单细胞分析 | Cicero+Signac 寻找顺式共可及网络
单细胞分析 | Cicero+Signac 寻找顺式共可及网络
|
存储 程序员 数据处理
深入理解Python中的生成器与迭代器###
本文将探讨Python中生成器与迭代器的核心概念,通过对比分析二者的异同,结合具体代码示例,揭示它们在提高程序效率、优化内存使用方面的独特优势。生成器作为迭代器的一种特殊形式,其惰性求值的特性使其在处理大数据流时表现尤为出色。掌握生成器与迭代器的灵活运用,对于提升Python编程技能及解决复杂问题具有重要意义。 ###
|
数据安全/隐私保护 算法 安全
数据加密有哪些方法?
【6月更文挑战第2天】数据加密有哪些方法?
1071 3
转换大小写与完成字符串反转
转换大小写与完成字符串反转
241 0
|
搜索推荐 BI OLAP
Clickhouse在画像场景如何快速计算人群的年龄分布
在画像场景场景中,对不同年龄段的人群进行计数是一个常见的操作,如何使用Clickhouse快速的计算出人群的年龄分布情况呢?
1863 1
Clickhouse在画像场景如何快速计算人群的年龄分布