zoukankan      html  css  js  c++  java
  • 有多少1

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

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

    一、设计思路:可以通过对一个多位数分别求它各个位上的1出现的次数相加的到1出现的次数。如123,其中个位上出现1的次数为13次,十位上出现的次数为20次,百位上出现的次数为24次,相加的到1出现的次数为57次。

    二、代码:

    import java.util.Scanner;
    public class main {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            int i=1;
            int t=0;
            for(i=1;i<=n;i*=10)
            {
                int m= 10*i;
                if((n%m)/i==0)
                {
                    t+=(n/m)*i;
                }
                else if((n%m)/i==1)
                {
                    t+=(n/m)*i;
                    t+=n%i+1;
                }
                else
                {
                    t+=(n/m +1)*i;
                }
    
            }
    
            System.out.print(t);
    
        }
    
    }

    三、截图

    四、总结:这个问题的主要难题是如何确定各个位上出现1次数的计算,刚开始我也不会算,经过很长时间,通过比较各个位数上出现次数,找到了规律。

  • 相关阅读:
    Junit 测试 简明教程
    Set接口
    mysql中模糊查询中的转译
    SSH乱码的解决方法
    const in c++
    inline in c++
    SQLite临时文件及其编译参数
    extern “c”
    常见姓名粤语拼法
    SQLite编译指令PRAGMA
  • 原文地址:https://www.cnblogs.com/act-gh95/p/4553095.html
Copyright © 2011-2022 走看看