博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结对开发----找一
阅读量:7286 次
发布时间:2019-06-30

本文共 1158 字,大约阅读时间需要 3 分钟。

一、题目:

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12)  = 5。2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

二、思路:
  这道题偏向数学的推理,其根本在于找规律,而规律则在于将所给的数进行分解,分成个十百千等位数的个体,再从每个中寻找规律。通过整理,每一位有多少个1只与其前后两位有关系,具体算法程序如下:
三、源程序
1 #include
2 #include
3 int main() 4 { 5 int num; 6 int count=0; 7 int flog=1; 8 int low=0; 9 int now=0;10 int high=0;11 cout<<"请输入数字: ";12 cin>>num;13 while (num/flog!=0) 14 {15 low=num-(num/flog)*flog;16 now=(num/flog)%10;17 high=num/(flog*10);18 switch (now)19 {20 case 0:21 count=count+high*flog;22 break;23 case 1:24 count=count+high*flog+low+1;25 break;26 default:27 count=count+(high+1)*flog;28 break;29 }30 flog=flog*10;31 }32 cout<
<<"中出现数字1的个数为:"<
<

四:实验截图

五、实验总结

    刚开始的时候我们的想法是找到一个通用的总结公式,但是在想了一段时间之后发现,这不是一个公式所能解决的,所以最好的方法就是找规律。在和同伴的不断总结之后,我们发现了规律,最终是实现了程序。

转载于:https://www.cnblogs.com/myblog1993/p/4470368.html

你可能感兴趣的文章
WINDOWSXP启动时直接进入系统而无需入用户名和密码
查看>>
论测试的主要责任
查看>>
关于测试团队的组织
查看>>
如何解决WEB性能测试中的验证码问题
查看>>
WinPe3.1启动系统逐步完善专题02:软件环境搭建
查看>>
思科模拟器——使用路由器分割局域网
查看>>
Tomcat日志配置
查看>>
Apache Spark源码走读之14 -- Graphx实现剖析
查看>>
2017年以后武汉的房价还会涨吗?
查看>>
10个免费开源的JS音乐播放器插件
查看>>
手机端-ajax跨域请求滚屏分页
查看>>
[转] Tips - C#获取LastError
查看>>
hdu - problem 1671 Phone List【字典树】
查看>>
Spring全家桶——SpringBoot渐入佳境
查看>>
杭电2028--Lowest Common Multiple Plus
查看>>
Java 回调机制
查看>>
计蒜客 17417 Highest Tower(思维+图论)
查看>>
linux下如何执行PHP脚本
查看>>
理解 select poll epoll
查看>>
vue首屏减少加载时间(gzip)
查看>>