zoukankan      html  css  js  c++  java
  • 1到N中“1”出现的次数

    题目:给定一个十进制的正整数,写下从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;
    }
    

      结果截图:

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

  • 相关阅读:
    词法分析器实验报告(JAVA)
    词法编辑器(Java)
    编译原理的那些事
    Discuz7.2 faq.php页面注入漏洞分析
    Discuz7.2 XML漏洞
    Python 爬取广州商学院新闻----测试版
    进程调度
    DOS下的网络管理命令
    DOS批处理实验
    熟悉使用DOS操作命令
  • 原文地址:https://www.cnblogs.com/chenjie00/p/4553437.html
Copyright © 2011-2022 走看看