zoukankan      html  css  js  c++  java
  • 算法:统计1-n中,1出现的次数

    package edu.cqu.algorithmTest;
    
    import java.util.Scanner;
    
    /*
     * 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。
     *
     * 思路:https://blog.csdn.net/sjf0115/article/details/8600599
     *
     *
     * */
    public class Countnum {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try(Scanner in = new Scanner(System.in)){
                System.out.println(Count(in.nextInt()));
            }
        }
        
        public static int Count(int n) {
            int count = 0; //统计1的个数
            int Fac = 1;    //数字位数变化的时候,权重的改变
            int low = 0,cur = 0,high = 0; //低位数字,当前位数字和高位数字
            if(n <= 0) return 0;
            while(n / Fac != 0) {
                //低位数字  例如数字  412: Fac = 10,表示当前在处理十位,低位412 - (412/10)*10 = 2 
                low = n - (n/Fac)*Fac;
                //当前位
                cur = (n/Fac) % 10;
                //高位
                high = (n / Fac) /10;
                
                if(cur == 0) {
                    //如果为0,出现1的次数由高位决定
                    count += high * Fac;
                    
                }else if(cur == 1) { //如果为1,出现1的次数由高位和低位决定
                    count += high * Fac + 1;
                }else { ////如果大于1,出现1的次数由高位决定
                    count += (high + 1) * Fac;
                }
                Fac *= 10; //位数提高
            }
            return count;
        }
    }
  • 相关阅读:
    VM player无法联网问题
    寄存器
    linux下的文件操作
    linux的切换目录操作
    linux的ls -al指令
    python对ASC码的加减
    ASC码速记
    pyhton的返回值
    intellij 调试方法
    2015,5.10
  • 原文地址:https://www.cnblogs.com/theWinter/p/10695011.html
Copyright © 2011-2022 走看看