2.4 1的个数

给一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。

例如:N=2,写下1,2.这样只出现了1个“1”。

N=12,写下1,2,3,4,5,6,7,8,9,10,11,12.这样,1的个数是5.

问题:(1)写一个函数f(N),返回1到N之间出现的“1”的个数,比如f(12)=5。(2)满足条件f(N)=N的最大的N是多少?


解法一:

ULONGLONG Count1InAInteger(ULONGLONG n) {
	ULONGLONG iNum=0;
	while(n!=0) {
		iNum += (n%10==1) ? 1:0;
		n/=10;
	}
	return iNum;
}

ULONGLONG f(ULONGLONG n) {
	ULONGLONG iCount = 0;
	for(ULONGLONG i=1;i<=n;i++) {
		iCount += Count1InAInteger(i);
	}
	return iCount;
}

时间复杂度为:O(N)*计算一个整数数字里面“1‘的个数的复杂度 =O(N*logN)。如果给定的N比较大,则需要很长的运算时间才能得到计算结果。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值