算法:统计1-n中,1出现的次数
Posted thewinter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:统计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; } }
以上是关于算法:统计1-n中,1出现的次数的主要内容,如果未能解决你的问题,请参考以下文章
剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)