zoukankan      html  css  js  c++  java
  • 求1到N(正整数)之间1出现的个数

    一、题目要求

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
    要求:
    写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。
    在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。
    要求将设计思想、代码实现、实现截图、个人总结以博文的形式发表。
    (截止日期2015-4-30晚18:00)
    二、设计思想
    首先得列出当N为1~AB(2=<A=<9)以内时,各种情况十位与个位“1”的个数,可以肯定十位的“1”与个位数上的“1”有关,即十位上“1”为B-0+1,个位上“1”与十位上数有关,即个位上“1”为A-0+1,所以用一个count变量记住“1”的个数。
    三、代码
    #include<iostream.h>
    int main()
    {
    	int count=0,i,N,temp;
    	cout<<"请输入N的值:";
    	cin>>N;
    	for(i=1;i<=N;i++)
    	{
    		temp=i;//记录i的值
    		while(temp!=0)
    		{
    			count+=(temp%10==1)?1:0;
    			temp/=10;//直接用i的话,i最后变为0,++的话变为1,死循环了
    		}
    	}
    	cout<<count<<endl;
    	return 0;
    }
    四、截图
    当N=101时,百位上“1”有2个,十位上“1”有10个,个位上“1”有11个,总共23个
    五、总结
     这个题目与以前题目都有一个相似之处,就像以前求读者买一批书的最低价格题目,都得找出一些数范围的各种联系或者规律,
    再设计算法就好解决了,总之找规律很重要特别是这种需要技巧的程序设计题,技巧很重要。但是切记不是任何题目都有技巧,
    所以特定题目特定考虑,找到最优算法。
     
     
     
  • 相关阅读:
    mybatis连接MySQL8.0出现的问题
    zqsb项目中发现没有getMSSVideoList
    idea快速实现接口的方法
    鸟枪换炮---IDEA
    IDEA的使用---常用的快捷键
    MQ消息队列
    token的主要用法?
    oracle中游标的使用
    乐观锁和悲观锁
    分布式系统的事务控制
  • 原文地址:https://www.cnblogs.com/2015tan/p/4466838.html
Copyright © 2011-2022 走看看