首页 > 其他 > 详细

2.4 1的数目

时间:2014-12-07 21:46:26      阅读:301      评论:0      收藏:0      [点我收藏+]

题目:

    写一个函数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的数目

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!