码迷,mamicode.com
首页 > 编程语言 > 详细

算法:统计1-n中,1出现的次数

时间:2019-04-12 12:06:20      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:system.in   决定   turn   +=   1出现的次数   Stub   ret   lse   util   

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;
    }
}

 

算法:统计1-n中,1出现的次数

标签:system.in   决定   turn   +=   1出现的次数   Stub   ret   lse   util   

原文地址:https://www.cnblogs.com/theWinter/p/10695011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!