求1到N(正整数)之间1出现的个数
2024-08-31 03:02:57
一、题目要求
给定一个十进制的正整数,写下从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个
五、总结
这个题目与以前题目都有一个相似之处,就像以前求读者买一批书的最低价格题目,都得找出一些数范围的各种联系或者规律,
再设计算法就好解决了,总之找规律很重要特别是这种需要技巧的程序设计题,技巧很重要。但是切记不是任何题目都有技巧,
所以特定题目特定考虑,找到最优算法。
最新文章
- 如何用java自带的工具生成证书
- DNS错误 事件4000 4013
- c#查找string数组的某一个值的索引
- 移动端自动化环境搭建-Robot Framework的安装
- telnetlib/SNMP
- java-io-FileInputStream与FileOutputStream类
- 第九篇 Integration Services:控制流任务错误
- Basic knowledge of javaScript (keep for myself)
- asp.net+swfupload 多图片批量上传(附源码下载)
- 12C RMAN 备份参考v1
- brctl 的使用
- IE浏览器中用Firebug调试网站的方法
- C#多线程和线程同步总结
- 学JAVA第十五天,方法重载及构造方法进一步了解
- SQL修改表字段,加附属属性
- ⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]
- Rikka with Subset HDU - 6092 (DP+组合数)
- Xshell 连接 CentOS 7 与 Ubuntu Server
- leetcode263
- Python爬虫基础(三)urllib2库的高级使用