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

1到N中“1”出现的次数

时间:2015-06-05 00:20:06      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

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

思路:刚开始做的时候,是想从1到N进行遍历,其中每个数都出现1的个数加起来,最后得出结果,但是老师让我们找规律,最后在网上搜索,发现了这个做法,找到小于N的数在每一位上可能出现1的次数之和,然后找到规律:假设N=abcde,如果要计算百位上出现1的次数,它和百位以下的数字,百位上的数字,百位以上的数字有关;

代码:

#include<iostream>
using namespace std;

void main()
{
	int N;
	cout<<"请输入一个数:";
	cin>>N;
	int low=0;//低位数
	int cur=0;//当前数
	int high=0;//高位数
	int count=0;
	int factor=1;

	while(N/factor!=0)
	{
		low=N-(N/factor)*factor;
		cur=(N/factor)%10;
		high=N/(factor*10);

		switch(cur)
		{
		case 0:
			count+=high*factor;
			break;
		case 1:
			count+=high*factor+low+1;
			break;
		default:
			count+=(high+1)*factor;
			break;
		}
		factor*=10;
	}
	cout<<"1到"<<N<<"之间1出现的次数为:";
	cout<<count<<" ";
	cout<<endl;
}

  结果截图:

技术分享

总结:这次的课堂练习能否成功我感觉主要和你会不会编程没有多大关系,主要是思想的实现,如何发现规律最重要;

1到N中“1”出现的次数

标签:

原文地址:http://www.cnblogs.com/chenjie00/p/4553437.html

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