标签:style sp bs 代码 ef as nbsp br ca
题目:
写一个函数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;
}标签:style sp bs 代码 ef as nbsp br ca
原文地址:http://blog.csdn.net/u010470972/article/details/41790049