zoukankan      html  css  js  c++  java
  • 软件工程课堂练习--找“一”

    一、题目要求

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

    要求:

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

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

    二、设计思路

      通过列举,不难发现有如下规律

          1.一位十进制数:当N>=1时,f(N)=1;当N=0时,f(N)= 0;

      2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4=6;

              f(23)=个位出现1的个数+十位出现1的个数=3+10=13;

              ......

              f(93)=个位出现1的个数+十位出现1的个数=10+10=20;

      3.三位十进制数:f(123)=个位出现1的个数+十位出现1的个数+百位出现1的个数=(10+10)*1+(3+10)+24=57;

                                f(199)=...=(10+10)*2+100;

                                f(203)=...=(10+10)*2+1+100;

                                f(213)=...=(10+10)*2+(2+4)+100;

                                 ......

                                f(303)=...=(10+10)*3+(1)+100;

                                ......

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

        当c=0时,受高位影响,百位上出现1的个数为:(ab)*100;

        当c=1时,受高位和低位影响,百位上出现1的个数为:(ab)*100+((cde)+1);

        当c>1时,受高位影响,百位上出现1的个数为:((ab)+1)*100;

    三、程序部分代码

    一下为计算1出现次数的部分代码

     1  while (n/factor!=0)       
     2     {
     3         LowerNum=n-(n/factor)*factor;
     4         CurNum=(n/factor)%10;
     5         HigherNum=n/(factor*10);
     6         switch (CurNum)
     7         {
     8         case 0:
     9             count=count+HigherNum*factor;
    10             break;
    11         case 1:
    12             count=count+HigherNum*factor + LowerNum +1;
    13             break;
    14         default:
    15             count=count+(HigherNum+1)*factor;
    16             break;
    17         }
    18         factor=factor*10;
    19     }
    20     return count;
    21 }

    四、截图

    五、实验总结

    根据老师的提示将数字分开看,分别看个位和十位..中“1”出现的次数,依次列举出来,很容易的就能找到规律

     

        

  • 相关阅读:
    IE6 select穿透问题(div 定位无法遮盖select)!
    NYOJ 35 表达式求值
    网络运营商名称显示&SIM名称显示
    Android开发四大组件之Service(具体解释篇)
    RabbitMQ之消息确认机制(事务+Confirm)
    rabbitmq的发布确认和事务
    java finally return
    用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构
    consul vs etcd3
    LinkedIn实时低延迟数据抓取系统Databus开源
  • 原文地址:https://www.cnblogs.com/caomeina/p/4474476.html
Copyright © 2011-2022 走看看