首页 > 试题广场 >

从1到1000000的所有自然数,数字“1”一共出现了多少次

[问答题]
从1到1000000的所有自然数,数字“1”一共出现了多少次?例:自然数101中,数字“1”出现了2次,自然数1011中,数字“1”出现了3次,请写明计算过程及结果。
推荐
考虑六位字符000000-999999,共有字符 6位*1000 000个数=6 000 000个字符。0-9这是个字符等概率出现,因此0-9的个数都为6 000 000/10=600 000个。由于前导0不影响1-9的个数,因此自然数0-999 999中,1-9出现的次数均为6 000 000。加上1000000中的那个1,因此最终答案为600 001。
编辑于 2016-01-09 18:44:07 回复(0)
1-999,999:10的5次方 * 6=600,000
1,000,000 : 1次

加起来一共600,001次
发表于 2015-06-03 14:52:39 回复(3)
var count = 0,
            reg = /1/g;

        var sCount = function(num){    //计算单次循环返回的数值
            try{
                return ((num + "").match(reg)).length;
            }catch(e){
                return 0;
            }
        };

        for (var i=0; i<=1000000; i++)
        {
            count += sCount(i);
        }
        console.log(count);

执行时间:4017ms 
执行结果:600001 
我也不知道怎么更优化一下了
编辑于 2016-01-09 20:56:45 回复(0)
思路:有两种方法,第一种当然 是直接逐个的做统计;第二种方法是基于归纳总结,设范围是1~N,介绍如下:
i)当N的中间某位为0,则某位出现1的个数CNT = 其高位数字×当前的位数
   如N=12013,百位为0,则百位出现1的CNT = 12 × 100(百位),分别为100~199,1100~1199,2100~2199,...,11100~11199

ii)当N的中间某位为1,则某位出现1的个数CNT = 其高位数字×当前的位数 + (低位数字+1)
  如N=12113,百位为1,则百位出现1的个数CNT = 12×100 + (113+1),分别为100~199,1100~1199,2100~2199,...,11100~11199,还有12100~12113

iii)当N的中间某位>1,则某位出现1的个数CNT = (高位+1)×当前位数
  如12213,CNT = (12+1)×100,分别为100~199,1100~1199,2100~2199,...,11100~11199,12100~12199
ULONGLONG Sumls(ULONGLONG N)
{
	ULONGLONG iCount = 0;
	ULONGLONG iFactor = 1;

	ULONGLONG iLowerNum = 0;
	ULONGLONG iCurrNum = 0;
	ULONGLONG iHigherNum = 0;

	while (N/iFactor != 0)
	{
		iLowerNum = N - (N/iFactor)*iFactor;
		iCurrNum = (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;
}
运行结果:
编辑于 2015-09-11 16:09:15 回复(0)
每个位置出现1的概率都是1/10
所有可能是10^6,每位出现1的可能都是10^6*1/10=10^5
相加后得10^5*6
发表于 2021-09-29 10:43:05 回复(0)
/**
 * 从1到1000000的所有自然数,数字“1”一共出现了多少次?
 * 例:自然数101中,数字“1”出现了2次,自然数1011中,
 * 数字“1”出现了3次,请写明计算过程及结果。
 * @author Administrator
 *
 */
public class CountOne {
	public static void main(String[] args) {
		Long l = (long) 1000000;
		long count=0;
		for(Long i=(long) 0;i<=l;i++){
			String str = i.toString();
//			System.out.println(str);
			count = count + countone(str);
		}
		System.out.print(count);
	}
	private static long countone(String s1) {
		int countone=0;
		for(int i=0;i<s1.length();i++){
			if(s1.charAt(i)=='1'){
				countone ++;
			}
		}
		return countone;
		
	}
}

结果:
600001

发表于 2016-01-11 21:18:24 回复(0)
数位dp水题,设dp[I]表示前I位,在非限定条件下的总的1的个数,搞之即可
发表于 2016-01-09 22:11:30 回复(0)
1+
10+9+
100+90+90+
1000+900+900+900+
10000+9000+9000+9000+9000+
100000+90000+90000+90000+90000+90000+
1000000+900000+900000+900000+900000+900000+900000+900000
发表于 2014-11-29 07:29:22 回复(1)