【213天】黑马程序员27天视频学习笔记【Day23-下】
叨逼叨两句
- 插。。没办成。又得等。
- 累死了。
23-04:按层级打印
- 注意那个lev的小细节
package com.test.demo001; import java.io.File; import java.util.Scanner; /** * @author wangtao * 1. 获取所有文件和文件夹,返回File数组。 * 2. 遍历该数组。 * 3. 无论是文件还是文件夹都直接打印。 * 4. 如果是文件夹,递归调用。 */ public class Demo013 { public static void main(String[] args) { File dir = getDir(); printLev(dir,0); } public static void printLev(File dir,int lev) { File[] subFiles = dir.listFiles(); for (File subFile : subFiles) { for(int i = 0;i <= lev;i++){ System.out.print("\t"); } System.out.println(subFile); if(subFile.isDirectory()){ printLev(subFile,lev + 1); //此处不能使用lev++和++lev,他们都会改变lev的值 } } } public static File getDir(){ //1. 创建键盘录入对象 Scanner sc = new Scanner(System.in); //2. 定义一个无限循环 while(true){ System.out.println("请输入文件夹路径:"); String line = sc.nextLine(); //3. 将键盘录入的结果存储在字符串中,并封装成File对象 File file = new File(line); //4. 对File对象做判断 if(!file.exists()){ System.out.println("该文件夹不存在,请重新输入"); }else if(file.isFile()){ System.out.println("您输入的是文件路径,请输入文件夹路径"); }else{ //5. 将文件夹路径对象返回 return file; } } } }
23-05:斐波那契数列的两种算法
数组
package com.test.demo001; public class Demo014 { public static void main(String[] args) { //数组形式 int[] arr = new int[8]; arr[0] = 1; arr[1] = 1; for(int i = 2;i < arr.length;i++){ arr[i] = arr[i - 2] + arr[i - 1]; } System.out.println(arr[arr.length-1]); } }
递归
package com.test.demo001; public class Demo014 { public static void main(String[] args) { System.out.println(get(8)); } public static int get(int num){ if(num == 1 || num == 2){ return 1; }else{ return get(num - 2) + get(num -1); } } }
23-06:1000的阶乘所有零和尾部零的个数
以下方式求阶乘超表数范围
package com.test.demo001; public class Demo014 { public static void main(String[] args) { int result = 1; for(int i = 1;i <= 1000;i++){ result = result * i; } System.out.println(result);//超出int类型的表数范围了 } }
求1000阶乘结果中有多少个零
package com.test.demo001; import java.math.BigInteger; public class Demo014 { public static void main(String[] args) { BigInteger bi1 = new BigInteger("1"); for(int i = 1;i <= 1000;i++){ BigInteger bi2 = new BigInteger(i + ""); bi1 = bi1.multiply(bi2); } System.out.println(bi1); int count = 0; String str = bi1.toString(); for(int i = 0;i < str.length();i++){ if('0' == str.charAt(i)){ count++; } } System.out.println(count); } }
求1000阶乘结果尾部有多少个零
package com.test.demo001; import java.math.BigInteger; public class Demo014 { public static void main(String[] args) { BigInteger bi1 = new BigInteger("1"); for(int i = 1;i <= 1000;i++){ BigInteger bi2 = new BigInteger(i + ""); bi1 = bi1.multiply(bi2); } System.out.println(bi1); int count = 0; String str = bi1.toString(); for(int i = str.length()-1; i >= 0; i--){ if('0'==str.charAt(i)){ count++; } else { break; } } System.out.println(count); } }
23-07:使用递归求1000阶乘尾部零的个数
- 逢5的倍数至少得一个零
- 逢5*5的倍数至少得两个零
- 逢
5*5*5
的倍数至少是三个零 - 逢
5*5*5*5
的倍数至少是四个零 - 具体见视频【23-07】
23-08:约瑟夫环
- i--那要注意
- count用来做为计数其
- i用来作为索引(指针)
package com.test.demo001; import java.util.ArrayList; public class Demo014 { public static void main(String[] args) { } public static int getLucklyNum(int num){ ArrayList<Integer> list = new ArrayList<>(); for(int i = 1;i <= num;i++){ list.add(i); } int count = 1; for(int i = 0; list.size()!= 1; i++) { if(i == list.size()){ i = 0; } if(count % 3 ==0){ list.remove(i--); //这个i--要注意! } count++; } return list.get(0); } }
相关推荐
kukelook 2020-04-22
程序员官方BLOG 2015-07-10
Java填坑之路 2019-09-08
ioriguojun 2013-01-25
madmanG 2016-03-13
ellende 2019-06-25
韩世雷程序员 2019-06-25
Java填坑之路 2019-06-25
ellende 2019-06-21
javaMerea 2019-06-21
taoxiuyi0 2019-06-21
叨逼叨两句收拾收拾~18-11:Collection中的常见方法sortpackage com.test.demo001;System.out.println; //根据默认排序结果获取集合中的最大值
javaMerea 2019-06-21
javaMerea 2019-06-21
韩世雷程序员 2019-06-21
taoxiuyi0 2019-06-21
ellende 2019-06-21
韩世雷程序员 2019-06-21
韩世雷程序员 2019-06-21
ellende 2019-06-21