Number of Digit One

Description:

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:
Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

Code:

        int countDigitOne(int n) {
                int ones = 0;
                for(long m = 1; m <= n; m *= 10) {
                        long a = n / m;
                        long b = n % m;
                        ones += (a + 8) / 10 * m + (a % 10 == 1) * (b + 1);
                }
                return ones;
        }

 

posted @ 2015-08-31 12:42  Rosanne  阅读(180)  评论(0编辑  收藏  举报