一、题目与要求

题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。

   2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

二、设计思路

第一种思路:

模10,除10取余,然后寻找规律,

9%10=9、9/10=0;

11%10=1、11/10=1;

15%10=5、15/10=1;

······

然后写了很多,想到如果模10等于0怎么办?等于1怎么办?取余怎么办,判断条件怎么写?

捣鼓了好长时间没有弄明白。

第二种思路(老师上课讲的思路):

f(13)=2+4=6

f(23)=3+10=13

f(33)=4+10=14

f(93)=10+10=20
……
某一位上1的个数与其位上的数字、其高一位上的数字、其低一位上的数字数字有关,最后编程实现如下:
三、源代码
 //hanxuedong

 #include<iostream.h>
int Count(int n)
{
int count=; //对1的个数计数
int now=; //N由最低位到最高位此时对应第now位
int l=; //第now位的低一位的数字
int nownum=; //第now位的数字
int h=; //第now位的高一位的数字
if(n<=)
{
return ;
}
while(n/now!=)
{
l=n-(n/now)*now;
nownum=(n/now)%;
h=n/(now*);
if(nownum==)
{
count+=h*now;
}
else if(nownum==)
{
count+=h*now+l+;
}
else
{
count+=(h+)*now;
}
now*=;
}
return count;
}
void main()
{
int number;
cout<<"请输入数字:";
cin>>number;
cout<<"0--"<<number<<"中1出现的次数为:"<<Count(number)<<endl;
}

四、运行结果

五、心得体会

像这一类的题目,找到规律很重要,找到规律就对代码实现以及代码优化就会有很大的帮助,面对不要急着上来就写代码,一定要先在下边动手写写,寻找以下规律。

课堂练习之找数字0-N中“1”出现的次数的更多相关文章

  1. 【Offer】[53-2] 【0~n-1中缺失的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内.在范围0~n-1内的n个数字中有且只有一个数字 ...

  2. java实现串中找数字

    串中找数字 以下的静态方法实现了:把串s中第一个出现的数字的值返回. 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回2 s = "82445ad ...

  3. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

  4. js中关于带数字类型参数传参丢失首位数字0问题

    最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉. 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456. 原 ...

  5. 1~n中数字0~9出现的次数

    题意:rt 分析: 当然不可能去遍历,应该寻找统计的方法. 如计算 78501 中 "5" 出现的次数. 我们可以枚举“5”出现的位置, 如当“5”位于倒数第2位时,写成 xxx5 ...

  6. 【Java面试真题】剑指Offer53.2——0~n-1中缺失的数字(异或、二分两种解法)

    [Java实现]剑指Offer53.2--0~n-1中缺失的数字:面试真题,两种思路分享 前面有另一道面试题[Java实现]剑指offer53.1--在排序数组中查找数字(LeetCode34:在排序 ...

  7. 【编程题目】n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始

    第 18 题(数组):题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后, ...

  8. 基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数

    在排序数组中,找出给定数字出现的次数比如{ 1, 2, 2, 2, 3}中2的出现次数是3次 我们可使用二分查找发,分别查找出2最先出现的位置和最后出现的位置相减即可. 下面是上代码: #includ ...

  9. [转]mybatis if test非空判断数字0为什么是false

    原文地址:http://blog.51cto.com/wangguangshuo/1944531 今天工作中发现一个Long类型的参数没有传到sql中去,在sql xml配置文件中是使用if test ...

随机推荐

  1. Vue项目用webpack打包后,预览时资源路径出错(文末有vue项目链接分享)

    最近用vue写了一些项目,项目写完之后需要打包之后才能放到网上展示,所以在这里记录一下项目打包的过程以及遇到的一些问题. --------------------------------------- ...

  2. vue-cli项目使用axios实现登录拦截

    登录拦截 一.路由拦截 项目中某些页面需要用户登录后才可以访问,在路由配置中添加一个字段requireAuth 在router/index.js中 . const router = new Route ...

  3. 『Python基础-4』字符串

    # 『Python基础-4』字符串 目录 1.什么是字符串 2.修改字符串 2.1 修改字符串大小 2.2 合并(拼接)字符串 2.3 使用乘号'*'来实现字符串的叠加效果. 2.4 在字符串中添加空 ...

  4. python--模块之os操作文件模块

    作用:OS又名为:操作系统.所以就是操作系统相关的功能.可以处理文件和目录这些我们日常手动需要做的操作,比如:显示当前目录下所有文件.删除某个文件.获取文件大小...os模块是与操作系统交互的一个接口 ...

  5. Flask基本介绍

    Fask 1.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架对于Werkzeug本质是socket服务端,其用于接收http ...

  6. Wake-Sleep(W-S)算法【转载】

    原文: https://www.zhihu.com/question/29648549 https://blog.csdn.net/zouxy09/article/details/8775518 en ...

  7. pyhton 下 使用getch(), 输入字符无需回车

    原代码来自 https://code.activestate.com/recipes/134892-getch-like-unbuffered-character-reading-from-stdin ...

  8. CSS-cascading stle sheets

    CSS-cascading stle sheets 1.      CSS 什么是CSS?CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式 ...

  9. C#实现窗口最小化到系统托盘

    先添加notifyicon控件notifyIcon1 using System; using System.Collections.Generic; using System.ComponentMod ...

  10. [Jmeter]jmeter之BeanShell Sampler测试应用

    前言: 在做接口测试的时候,有些接口做了签名校验,而签名是根据某算法进行加密,这时候,简单的接口测试工具无法完成该工作,所以想到了Jmeter,他是java编写,有强大的扩展性,足矣完成我们需要的操作 ...