码迷,mamicode.com
首页 > 其他好文 > 详细

2.4 1的数目

时间:2014-12-07 21:47:01      阅读:120      评论:0      收藏:0      [点我收藏+]

标签: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;
}


2.4 1的数目

标签:style   sp   bs   代码   ef   as   nbsp   br   ca   

原文地址:http://blog.csdn.net/u010470972/article/details/41790049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!