1的数目

给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。

例如:

N=2,写下1,2。这样出现1个“1”。

N=12,写下1,2,3,4,5,6,7,8,9,10,11,12。这样子出现5个“1”

问题是:1写一个函数f(N),返回1至N之间出现“1”的个数,比如f(2)=1,f(12)=5.

int foo(int n){
    int nTemp = n, times = 1, num = 0;
    while(nTemp /= 10){
        times *= 10;
    }
    int upperFactor = 0, lowerFactor, iFactor;
    while(times > 0){
        iFactor = (n / times)%10;
        lowerFactor = n % times;
        if(0 == iFactor){
            num += (upperFactor * times);
        }
        else if(1 == iFactor){
            num += ((upperFactor * times) + (lowerFactor + 1));
        }
        else{
            num += ( (upperFactor+1) * times);
        }
        upperFactor = (n / times);
        times /= 10;
    }
    return num;
}

 

你可能感兴趣的:(1的数目)