zoukankan      html  css  js  c++  java
  • 题目

    一、题目与要求

    题目:给定一个十进制的正整数,写下从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的个数与其位上的数字、其高一位上的数字、其低一位上的数字数字有关,最后编程实现如下:
    三、源代码
     1 //hanxuedong
     2 
     3 #include<iostream.h>
     4 int Count(int n)
     5 {  
     6     int count=0;  //对1的个数计数
     7     int now=1;    //N由最低位到最高位此时对应第now位
     8     int l=0;      //第now位的低一位的数字
     9     int nownum=0; //第now位的数字
    10     int h=0;      //第now位的高一位的数字
    11     if(n<=0)
    12     {  
    13         return 0;  
    14     }  
    15     while(n/now!=0)
    16     {  
    17         l=n-(n/now)*now;   
    18         nownum=(n/now)%10;  
    19         h=n/(now*10);  
    20         if(nownum==0) 
    21         {  
    22             count+=h*now;  
    23         }  
    24         else if(nownum==1)
    25         {  
    26             count+=h*now+l+1;  
    27         }  
    28         else
    29         {  
    30             count+=(h+1)*now;  
    31         }  
    32         now*=10; 
    33     }  
    34     return count;  
    35 }  
    36 void main()
    37 {
    38     int number;
    39     cout<<"请输入数字:";
    40     cin>>number;
    41     cout<<"0--"<<number<<"中1出现的次数为:"<<Count(number)<<endl;
    42 }
    复制代码
  • 相关阅读:
    vue中 根据音频 获取音频的时长
    获取dom位置信息
    react笔记
    Git 基础命令
    vue 笔记
    倒计时
    删留言
    python 类之类变量与实例变量
    python 类的定义
    python 列表推导式
  • 原文地址:https://www.cnblogs.com/airfand/p/4477766.html
Copyright © 2011-2022 走看看