整数中1出现的次数

  1. 题目描述 (从1到n整数中1出现的次数)
    1. 解题思路

题目描述 (从1到n整数中1出现的次数)

求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

解题思路

  • 有规律可循
  • 从位数小开始,统计1的个数
  • 位数越大,重复统计的越多,规律越明显
  • 商的最后一位是1,则有b+1个1 (a%10==1)*(b+1)
  • 商加上8除以10的商乘以当前位数的最小值为1的个数 (a+8)/10*1
class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n)
    {
        int count = 0;
        long long i = 0;
        for (i = 1; i <= n;i*=10) {// 统计各个数位
            int a = n/i;// 商
            int b = n%i;// 余数
            // 
            count = count + (a+8)/10*i + (a%10==1)*(b+1);
        }
        return count;
    }
};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

💰

Title:整数中1出现的次数

Count:270

Author:攀登

Created At:2019-12-26, 23:12:31

Updated At:2024-06-15, 15:53:35

Url:http://jiafeimao-gjf.github.io/2019/12/26/sword-%E6%95%B4%E6%95%B0%E4%B8%AD1%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

Help us with donation