为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 求出1的个数

求出1的个数

2018-08-29 6页 doc 135KB 10阅读

用户头像

is_963767

暂无简介

举报
求出1的个数求出1的个数 原题目, 题定一十题制个数N~下写从1题始~到N的所有整~然后一下其中出题的所有数数"1"的。个数 例如, N=2~下写1~2。题题只出题了1个"1" N=12,写下 1,2,3,4,5,6,7,8,9,10,11,12。题题"1"的是个数5 题出一函~返回写个数1到N之题出题"1"的~比如 个数f(12)=5 1package org.blogjava.arithmetic; 2 3/** 4 * @author Jack.Wang 5 * @see 6 */ 7public class Co...
求出1的个数
求出1的个数 原题目, 题定一十题制个数N~下写从1题始~到N的所有整~然后一下其中出题的所有数数"1"的。个数 例如, N=2~下写1~2。题题只出题了1个"1" N=12,写下 1,2,3,4,5,6,7,8,9,10,11,12。题题"1"的是个数5 题出一函~返回写个数1到N之题出题"1"的~比如 个数f(12)=5 1package org.blogjava.arithmetic; 2 3/** 4 * @author Jack.Wang 5 * @see 6 */ 7public class CountNumber { 8 9 private int count1Num(int num) { 10 int sum = 0; 11 while (num != 0) { 12 sum += (num % 10 == 1) ? 1 : 0; 13 num /= 10;14 } 15 return sum; 16 } 17 18 private int countNum(int n) { 19 int sum = 0; 20 for (int i = 1; i <= n; i++) { 21 sum += count1Num(i);22 } 23 return sum; 24 } 25 26 private int countNumNew(int n) { 27 int count = 0; 28 int factor = 1; 29 int lower; 30 int current; 31 int higher; 32 while (n / factor != 0) { 33 lower = n - (n / factor) * factor;34 current = (n / factor) % 10;35 higher = n / (factor * 10);36 switch (current) { 37 case 0: 38 count += higher * factor;39 break; 40 case 1: 41 count += higher * factor + lower + 1; 42 break; 43 default: 44 count += (higher + 1) * factor;45 } 46 factor *= 10; 47 } 48 return count; 49 } 50 51 /** 52 * @param args 53 */ 54 public static void main(String[] args) { 55 System.out.println("两个算法的题果相等"); 56 /** 57 * 方法一, 题题题看上出不是一题题题~因题不需要太多的思考~只要稍点程序个并个懂 的人都想到~题题的题题如下。会 58 * 题方法题题但是题算法的致命题题是效率~的题题题题度个很个它 是 O(N)*count(int num)函的题题度数= 59 * O(N)*logN。可题如果N很从大题题题度成题性增题。是否题有更好的方法~我题的是算法题题的角度考题最题的方法, 题看方法二。 60 */ 61 long start = System.currentTimeMillis();62 CountNumber cn1 = new CountNumber(); 63 System.out.println("第一算法的题果个"+cn1.countNum(100000000));64 long end = System.currentTimeMillis();65 long time1 = end - start; 66 /** 67 * 方法二, 题题方法分题分析N的每一位上1出题的可能性~题者可以自己按照题题的思想分析一下~最题得出你会 68 * 一题题~就是通题分析个N而不是遍题1到N的每一就可以得出答案~如果个数N的题度题Len的题题题 算法的题题度题O (Len)。 题题题律题 69 * 1. 如果位上题数0~1的目由题位以上的定~乘以题位的分位数数决并 比如百位上是0~高位上是14题百位上出题1的目数 题 14*100。 70 * 2. 如果位上题数1~1的目由高位和低位共同定。数决 比如高位是14低位是112~题百位出题1的目题数 14×100+;112+ 1, 71 * 3. 如果位上大于数1~题百位出题1的目题数 ;14+1,×10072 */ 73 start = System.currentTimeMillis();74 CountNumber cn2 = new CountNumber(); 75 System.out.println("第二算法的题果个"+cn2.countNumNew(100000000)); 76 end = System.currentTimeMillis();77 long time2 = end - start; 78 System.out.println("第一算法的题延比第二算法的多个个" + (time1 - time2) / 1000 + "秒"); 79 } 80 81 /** 82 Console Out: 83 两个算法的题果相等 84 80000001 85 80000001 86 第一算法的题延比第二算法的多个个27秒 87 */ 88}
/
本文档为【求出1的个数】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索