数学统计规律:
/*******************************************************************************
** 给定一个十进制正整数 N,写下从 1 开始,到 N 的所有整数,
** 然后数一下其中出现的所有“1”的个数。
** 例如:
** N= 2,写下 1,2。这样只出现了 1 个“1”。
** N= 12,我们会写下 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。这样,1的个数是 5。
** 问题是:
** 写一个函数f(N) 返回1到N之间出现的“1”的个数,比如f(12)=5。
*******************************************************************************/
int solution(int n)
{
int lower = 0, current = 0, higher = 0;
int count = 0, factor = 1;
while (n / factor != 0)
{
lower = n - (n / factor) * factor;
current = (n / factor) % 10;
higher = n / (factor * 10);
switch (current)
{
case 0:
count += higher * factor;
break;
case 1:
count += higher * factor + (lower + 1);
break;
default:
count += (higher + 1) * factor;
}
factor *= 10;
}
return count;
}