首页 > 代码库 > 2.4 1的数目
2.4 1的数目
题目:
写一个函数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; }
2.4 1的数目
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。