Number of Digit One

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.

 

public class Solution {
    public int countDigitOne(int n) {
        long res = 0;
        int left = n;
        int right = 0;
        int base = 1;
        while (left > 0) {
        	int cur = left % 10;
        	left = left / 10;
        	right = n % base;
        	if (cur == 1) {
        		res += left * base;
        		res += right + 1;
        	} else if (cur == 0) {
        		res += left * base;
        	} else {
        		res += (left+1) * base;
        	}
        	right = cur * base + right;
        	base = base * 10;
        }
        return (int) res;
    }
}

 

猜你喜欢

转载自hcx2013.iteye.com/blog/2253519