zoukankan      html  css  js  c++  java
  • 找“1”

    题目:

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

         要求:   

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

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

    一、设计思路

        因为是找从1到n中1出现的次数的总和,所以比较笨的方法是采用循环从1到n,一位一位的找出1出现的次数,并做统计。可以利用10来做处理,以达到一位一位减少的目的。(这可能不是老师想要的思路,但别的思路没能想出来,编程实现的话只能先用这个思路了)

    二、源代码

     1 #include<iostream.h>
     2 void main()
     3 {
     4     int i,num,count=1,a;
     5     cout<<"请输入数字:";
     6     cin>>num;
     7     if(num==1)
     8     {
     9         count=1;
    10     }
    11     else
    12     {
    13         for(i=1;i<num;i++)
    14         {
    15             a=i;
    16             while(a!=0)
    17             {
    18                if(a%10==1)
    19                {
    20                   count++;
    21                }
    22                a=a/10;
    23             }
    24         }
    25     }
    26     cout<<"1出现的次数:"<<count<<endl;
    27 }

    三、结果截图

    四、实验总结

        这次主要是找规律,但自己没能耐下心来去发现,通过观察同学们写的博客,找到规律便不需要再遍历,大大增加了运算的速度。不得不说找规律也需要很多技巧,明显这方面我的经验还不足,以后要多加训练,希望下次遇到类似问题能找到更好的方法。

  • 相关阅读:
    ubuntu安装redis
    ubuntu安装mongodb
    IO-MYSQL的理解
    HTTP协议理解
    linux面试
    mysql引擎事物支持
    ubuntu安装scrapy方法
    mysql关系型和非关系型区别
    mysql引擎
    vue优势
  • 原文地址:https://www.cnblogs.com/gaoyang110/p/4474518.html
Copyright © 2011-2022 走看看