给定一个十进制正整数N,写下从1开始,到N所有的整数,然后数一下其中出现的所有“1”的个数。
例如:N=2,写下1,2,这样只出现了1个“1”
      N=12,写下1,2,3,4........,12.这样出现了5个“1”

假设N=abcde

1 如果百位上的数字为0,则可以知道,百位上可能出现1的次数由更高位决定,比如12013,则可以知道百位出现1的情况为100-199,

1100-1199,2100-2199,........,11100-11199,一共有1200个。由更高位的数字(12)决定,并等于12(高位数字)x100(当前位数)

2 如果百位上的数为1,则可以知道,百位上可能出现1的次数不仅受高位的影响也会受到低位的影响。
受高位影响:与情况1类似
受低位影响:等于低位数字+1

3 如果百位上数字大于1,则百位上可能出现1的次数仅由更高位决定
(高位数字+1)x当前位数

icont=0;
ifactor
=1;
ilowernum
=0;
icurrnum
=0;
ihighernum
=0;

while(n/ifactor!=0)
{
  ilowernum
=n-(n/ifactor)*ifactor;
  icurrnum
=(n/ifactor)%10;
  ihighernum
=n/(ifactor*10);
  
switch(icurrnum)
  {
    
case 0:
        icount
+=ihighernum*ifactor;
        
break;
    
case 1:
        icount
+=ihighernum*ifactor+ilowernum-1;
        
break;        
    
case 2:
        icount
+=(ihighernum+1)*ifactor;
        
break;        

  }
  ifactor
+=10;
}
 posted on 2009-08-05 12:25  清水湾  阅读(365)  评论(0)    收藏  举报