题目

1 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
2 要求:
  (1) 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。
  (2)在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
设计思想
  (1)一位数时
    f(0)=0;f(1)=1;f(2-9)=1;
  (2)二位数时
    f(10)=1+(0+1)=2;
    f(11)=(1+1)+(1+1)=4;
    f(12)=(1+1)+(2+1)=5;
    f(13)=(1+1)+(3+1)=6;
    f(23)=(2+1)+10=13;
    f(33)=(3+1)+10=14;
    f(93)=(9+1)+10=20;
  (3)三位数时
    f(123)=个位出现的1数+十位出现的1数+百位出现的1数
  (4)N = abcde时
    以c位为例
    if(c==0)  num=ab*100;
    if(c==1)  num=ab*100+de+1;
    if(c>=2)  num=(ab+1)*100
源代码

  

#include<iostream>
#include<math.h>
using namespace std; int Count1Num(int Digit)
{
int figure=1;//标记计数1的位数(1为个位,10为十位)
int curOfDigit=0;//当前位数数字
int lowerOfDigit=0;//较低位数字大小(可为多位)
int higherOfDigit=0;//较高位数字大小
int count=0;
while(Digit/figure!=0)
{
//获取数字
curOfDigit=(Digit/figure)%10;
lowerOfDigit=Digit-(Digit/figure*figure);
higherOfDigit=Digit/(figure*10);
if(Digit<=0)
return 0;
if(0==curOfDigit)//当前数字为0时计数
{
count+=higherOfDigit*figure;
}
else if(1==curOfDigit)//当前数字为1时计数
{
count+=higherOfDigit*figure+lowerOfDigit+1;
}
else
{
count+=(higherOfDigit+1)*figure;
}
figure=figure*10;//数字左移一位
}
return count;
}
void main()
{
int Digit;
int max=0;
while((cout<<"请输入要测试的数值(输入-1结束测试):"<<endl)&&(cin>>Digit))
{
if(Digit==-1)
break;
cout<<"1到"<<Digit<<"包含的1个数:"<<Count1Num(Digit)<<endl;
}
}

  

  程序截图

实验总结

本题的思想主要是逐位考虑,从低位向高位逐位进行1的计数,直到位数超出所求数字。

 
 
 

课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。的更多相关文章

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

    一.题目: n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. n要求: n写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  ...

  2. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  3. 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题

    题目:给定一个十进制数M,将其转化为N进制数,其中2<=N<=16,其中N为32为整型数; 输入:M N,如7 2 输出转化结果:111 注意点:考虑负数的情况,记得添加负号(其实直接添加 ...

  4. 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。

    题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 解法一:暴力求解.从1开始查找M,然后判断M*N=X这个数字是否只含有0,1. 解法二:由 ...

  5. JAVA 之 每日一记 之 算法( 给定一个正整数,返回它在 Excel 表中相对应的列名称。 )

    题目: 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -& ...

  6. 给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 <把一个整数各个数位进行全排列>

    """给定一个正整数,实现一个方法求出离该整数最近的大于自身的 换位数 -> 把一个整数各个数位进行全排列""" # 使用 permu ...

  7. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  8. 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数

    1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...

  9. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序

    题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...

随机推荐

  1. poj1840 哈希

    虽然这题目我曾经在我们学校OJ上做过但是我那时候是用的暴力做的,这次我用的是哈希写的,我写这题目时候开始是在main函数里面写哈希感觉很麻烦很不清晰,然后我换用函数来写,清晰了很多,写完就AC了.用哈 ...

  2. 002vim常用命令

    1.命令行模式:刚进入vim时的模式,该模式下可以移动光标进行浏览,可以进行整行删除等操作,但无法编辑文字,该模式下的功能键有: (1)yy:复制当前光标所在行 (2)[n]yy:n为数字,复制当前光 ...

  3. css初涉

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. css3 2d

    CSS3 2D 转换   通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 以下是 2D 转换 1 translate()通过 translate() 方法,元素从其当前位置移动 ...

  5. JQuery.tmpl()的用法

    动态请求数据来更新页面是现在非常常用的方法,现在通过Ajax请求返回的数据更多的是json对象, 为了解决js动态拼接数据这方面的问题,JavaScript 也可以利用模版来解决这些问题,比如基于 j ...

  6. 利用js+canvas实现的时钟效果图

    canvas+js时钟特效 运用js+canvas方面的知识完成一个时钟的效果图,再利用for循环实现指针的转动效果: <!--网页文档的声明--> <!doctype html&g ...

  7. mac虚拟机parallels 无法启动 "Windows 7" 虚拟机

    关机前在虚拟机上安装了个游戏有点大,第二天开机就使用不了虚拟机了: 提示:mac虚拟机parallels  无法启动 "Windows 7" 虚拟机.  释放至少 241 MB 的 ...

  8. PowerShell 方式部署Sharepoint Solution

    覆盖 Uninstall-SPSolution –Identity Caesarstone.GlobalSite.WebSite.wsp –WebApplication http://myserver ...

  9. delphi 资源文件详解

    delphi资源文件详解 一.引子: 现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便 ...

  10. android在程序中打开另一个程序

    在开发android应用的时候,在一些情况下要有前置条件,比如这边所说的要启动时要确保别的应用程序服务已经打开  或者在操作中启动别的应用等. 先来一段google上的代码: 1. 已知包名和类名的情 ...