有多少1
2015-06-04 21:47
211 查看
题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求: 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
一、设计思路:可以通过对一个多位数分别求它各个位上的1出现的次数相加的到1出现的次数。如123,其中个位上出现1的次数为13次,十位上出现的次数为20次,百位上出现的次数为24次,相加的到1出现的次数为57次。
二、代码:
三、截图
四、总结:这个问题的主要难题是如何确定各个位上出现1次数的计算,刚开始我也不会算,经过很长时间,通过比较各个位数上出现次数,找到了规律。
要求: 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数。例如 f(12) = 5。
一、设计思路:可以通过对一个多位数分别求它各个位上的1出现的次数相加的到1出现的次数。如123,其中个位上出现1的次数为13次,十位上出现的次数为20次,百位上出现的次数为24次,相加的到1出现的次数为57次。
二、代码:
import java.util.Scanner; public class main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int i=1; int t=0; for(i=1;i<=n;i*=10) { int m= 10*i; if((n%m)/i==0) { t+=(n/m)*i; } else if((n%m)/i==1) { t+=(n/m)*i; t+=n%i+1; } else { t+=(n/m +1)*i; } } System.out.print(t); } }
三、截图
四、总结:这个问题的主要难题是如何确定各个位上出现1次数的计算,刚开始我也不会算,经过很长时间,通过比较各个位数上出现次数,找到了规律。
相关文章推荐
- hdu 5113 Black And White
- xUtils
- VS2010 创建和调用动态链接库
- POJ3276 Face The Right Way--反转问题初学
- C语言函数使用
- Android多线程从入门到精通
- POJ3276 Face The Right Way--反转问题初学
- 课程改进意见
- PAT 1007 Course List for Student (25)
- LTE中的名词解释(分集增益 RSRP RSRQ SINR AWGN 空中接口)
- SpeechMarker API 与端点检测
- poj 3311 2进制状态压缩dp,tsp
- MySQL行级锁、表级锁、页级锁详细介绍
- c语言一起学习之建立头文件(二)
- Ueditor结合七牛云及百度云存储(JAVA版,ueditor-1.4.3)实现图片文件上传
- 【分布式存储系统sheepdog 】
- 寻找水王
- CS小分队第二阶段冲刺站立会议(6月4日)
- 事务隔离性和锁的区别和联系
- 使用Unity3D编写ARPG游戏——角色属性的定义与实现(二)