• 软件工程课堂作业(十六)——找“1”的个数


    一、题目:

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

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

    二、设计思路:

          首先先看一下几个数,从个位1,十位1,百位1......等计算该数所有1的个数:

          1、一位数:N>=1时,f(N)=1;N=0时,f(N)=0.

          2、两位数:f(14)=2+5=7   f(24)=3+10=13

          3、三位数:f(113)=12+14+14=40

          ......

          f(abcde),若要计算c位上1的个数,需看ab、c、de的情况。

          如,当c>1时,受ab和c本身影响;c=1时,受ab、c和de影响;c=0时,受ab影响。

    三、源代码:

     1 //找1的个数——胡亚宝——2015/04/29
     2 
     3 #include "stdafx.h"
     4 #include "stdlib.h"
     5 
     6 int OneNum(int n)
     7 {
     8     int count=0,factor=1; 
     9     int LNum=0;
    10     int CurNum=0;
    11     int HNum=0;
    12     while ((n/factor)!=0)       
    13     {
    14         LNum=n-(n/factor)*factor;
    15         CurNum=(n/factor)%10;
    16         HNum=n/(factor*10);
    17         switch (CurNum)
    18         {
    19         case 0:
    20             count=count+HNum*factor;break;
    21         case 1:
    22             count=count+HNum*factor + LNum +1;break;
    23         default:
    24             count=count+(HNum+1)*factor;break;
    25         }
    26         factor=factor*10;
    27     }
    28     return count;
    29 }
    30 
    31 int _tmain(int argc, _TCHAR* argv[])
    32 {
    33     int num;
    34     printf("请输入一个正整数:");
    35     scanf("%d",&num);
    36     printf("出现“1”的个数为:%d
    ",OneNum(num));
    37     return 0;
    38 }

    四、运行结果:

    五、心得体会:

          这次拿到题目我首先想到的就是列举数字找规律,但是数字列出来了,比较小的数的规律找出来,大的数比如几千几万还是有点困难。在与其他同学讨论的过程中渐渐有了一些想法。

          实现的过程不难,将思路用算法计算出来就好,而且没有出现编译的错误。

  • 相关阅读:
    数据库多表查询,左连接(入门)
    让弹出层始终显示在屏幕正中间
    jq中的ajax合集总结
    ajax之$.getScript()
    Jquery遮罩ShowLoading组件
    jquery中prop()方法和attr()方法的区别
    Bootstrap 响应式实用工具
    VS使用技巧
    ubuntu下postgreSQL安装配置
    基础设施即代码(Infrastructure as Code)
  • 原文地址:https://www.cnblogs.com/huyabaoboke/p/4467766.html
Copyright © 2020-2023  润新知