2.4 1的数目

来源:互联网 发布:刷会员软件 编辑:程序博客网 时间:2024/04/29 23:46

题目:

    写一个函数f(n),返回1到N之间出现的“1”的个数。

从特殊情况推导到一般情况。

分为该位数是0、1、其他。。

(1)如果这位上的数字是0的话,那么这个位上出现1的次数仅有更高位决定。

(2)如果这位上的数字是1的话,那么这个位上出现的1的次数不仅跟更高位有关,还跟更低位有关。

· (3)如果这位上的数字是其他(2-9)的话,那么这个位上出现1的次数仅由更高位决定。

       

代码如下:

__int64 Sum1s(__int64 n) {__int64 iCount = 0;__int64 iFactor = 1;__int64 iLowerNum = 0;__int64 iCurrNum = 0;__int64 iHigherNum = 0;while(n / iFactor != 0) {iLowerNum = n - (n / iFactor) * iFactor;iCurrent = (n / iFactor) % 10;iHigherNum = n / (iFactor * 10);switch(iCurrNum) {case 0:iCount += iHigherNum * iFactor;break;case 1:iCount += iHigherNum * iFactor + iLowerNum + 1;break;default:iCount += (iHigherNum + 1) * iFactor;break;}iFactor *= 10;}return iCount;}


0 0
原创粉丝点击