zoukankan      html  css  js  c++  java
  • 【面试题032】从1到n整数中1出现的次数

    【面试题032】从1到n整数中1出现的次数
    题目:
        输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
        例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1出现了5次。
     
    思路一:
        对每一个数字做判断,把1出现的数字累加。
        可以通过对10取余,判断这个数字个位上的数字是不是等于1,然后这把这个数字除以10,相当于是10进制下面的向右边移动了一位。
     
        如果输入数字为n,n有logn位,那么我们要判断每一位是不是1,那么它的计算时间复杂度是O(n*logn)。
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <iostream>

    using namespace std;

    int NumberOf1(unsigned int n)
    {
        int number = 0;
        while (n)
        {
            if (n % 10 == 1)
            {
                number ++;
            }
            n = n / 10;
        }
        return number;
    }

    int NumberOf1Between1AndN(unsigned int n)
    {
        int number = 0;
        for (unsigned int i = 1; i <= n; ++i)
        {
            number += NumberOf1(i);
        }
        return number;
    }

    int main()
    {
        unsigned int num = 12;
        cout << NumberOf1Between1AndN(num) << endl;
        return 0;
    }
     
    思路二:
        对每一个数字做判断,把1出现的数字累加。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    LeetCode Minimum Path Sum
    第六章-2-数组练习
    第六章-1-数组练习
    第五章-for循环的练习
    第四章:if else switch使用
    第三章
    实训篇-JavaScript-打地鼠
    实训篇-Html-注册页面【简单】
    实训篇-Html-计算器
    实训篇-JavaScript-陶渊明去没去过桃花源
  • 原文地址:https://www.cnblogs.com/codemylife/p/3740462.html
Copyright © 2011-2022 走看看