zoukankan      html  css  js  c++  java
  • 欧拉计划15

    网格路径

    从一个2×2方阵的左上角出发,只允许向右或向下移动,则恰好有6条通往右下角的路径。对于20×20方阵来说,这样的路径有多少条?

    思路:
      在2*2宫格中,无论哪种走法,一共都要走四步,向右走两步,向下走两步;
      在20*20宫格中,无论哪种走法,一共都要走40步,向右走20步,向下走20步;
      所以就变成了排列问题C42 = 4!/(2! * 2!);
      Cmn = m!/(n! * (m - n)!);

    具体代码:

    知识点总结:

      BigDecimal:

        定义:
          BigDecimal a=new BigDecimal(String; val)
          BigDecimal a=new BigDecimal(double val);
        转换:
          1)定义中就可以将String型和double 型的转换为BigDecimal型
          2)Int,float, double, long转换为BigDecimal
            a.floatValue();
            a.doubleValue();
            a.longValue();
            a.intValue();
          3) BigDecimal a转换为String(其它的类型转换为String都通用以下方法)
            toString();
            String.valueOf(a);
            比较(比较的数BigDecimal a)
            1)Int num=a.compareTo(BigDecimal anotherBigDecimal);
            当此BigDecimal在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
            BigDecimal取其中最大、最小值、绝对值、相反数:
            a.max (b) //比较取最大值
            a.min(b) //比较取最小值
            a.abs()//取最绝对值
            a.negate()//取相反数
          计算:
            加: a.add(b);
            减: a.subtract(b);
            乘: a.multiply(b);
            除: a.divide(b,2);//2为精度取值
            int 、long、double、 float的取绝对值和同类型间比较大小都可用以下Math方法:
            Math.max(a,b);//比较取最大值
            Math.min(a,b);//比较取最小值
            Math.abs(a); //取最绝对值
         
       

    BigDecimal 原文:https://blog.csdn.net/liucheng417/article/details/50825047

     RoundingMode 介绍

    package java.math;
    
    public enum RoundingMode {
    
        UP(BigDecimal.ROUND_UP),
    
        DOWN(BigDecimal.ROUND_DOWN),
    
        CEILING(BigDecimal.ROUND_CEILING),
    
        FLOOR(BigDecimal.ROUND_FLOOR),
    
        HALF_UP(BigDecimal.ROUND_HALF_UP),
    
        HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
    
        HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
    
        UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
    
        final int oldMode;
    
        private RoundingMode(int oldMode) {
            this.oldMode = oldMode;
        }
    
        public static RoundingMode valueOf(int rm) {
            switch(rm) {
    
            case BigDecimal.ROUND_UP:
                return UP;
    
            case BigDecimal.ROUND_DOWN:
                return DOWN;
    
            case BigDecimal.ROUND_CEILING:
                return CEILING;
    
            case BigDecimal.ROUND_FLOOR:
                return FLOOR;
    
            case BigDecimal.ROUND_HALF_UP:
                return HALF_UP;
    
            case BigDecimal.ROUND_HALF_DOWN:
                return HALF_DOWN;
    
            case BigDecimal.ROUND_HALF_EVEN:
                return HALF_EVEN;
    
            case BigDecimal.ROUND_UNNECESSARY:
                return UNNECESSARY;
    
            default:
                throw new IllegalArgumentException("argument out of range");
            }
        }
    }


















































    RoundingMode是一个枚举类,有以下几个值:UP,DOWN,CEILING,FLOOR,HALF_UP,HALF_DOWN,HALF_EVEN,UNNECESSARY

    2 舍入模式

    2.1  UP

    public final static int ROUND_UP = 0;
     

    定义:远离零方向舍入。

    解释:始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值。

    图示:

    示例:

    输入数字 使用 UP 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 2
    1.0 1
    -1.0 -1
    -1.1 -2
    -1.6 -2
    -2.5 -3
    -5.5 -6

    2.2  DOWN

      

    public final static int ROUND_DOWN = 1;
     

    定义:向零方向舍入。

    解释:从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算值的绝对值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 1
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -1
    -2.5 -2
    -5.5 -5

     

     

     

     

     

     

     

     

     

    2.3 CEILING

    public final static int ROUND_CEILING = 2;

     

    定义:向正无限大方向舍入。

    解释:如果结果为正,则舍入行为类似于 RoundingMode.UP;如果结果为负,则舍入行为类似于RoundingMode.DOWN。注意,此舍入模式始终不会减少计算值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 2
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -1
    -2.5 -2
    -5.5 -5

     

     

     

     

     

     

     

     

     

     

    2.4 FLOOR

    public final static int ROUND_FLOOR = 3;

     

    
    

     

    定义:向负无限大方向舍入。

    解释:如果结果为正,则舍入行为类似于 RoundingMode.DOWN;如果结果为负,则舍入行为类似于RoundingMode.UP。注意,此舍入模式始终不会增加计算值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 1
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -2
    -1.6 -2
    -2.5 -3
    -5.5 -6

     

     

     

     

     

     

     

     

     

     

    2.5 HALF_UP (Half指的中点值,例如0.5、0.05,0.15等等)

    public final static int ROUND_HALF_UP = 4;

     

    
    

     

    定义:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向上舍入。

    解释:如果被舍弃部分 >= 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同RoundingMode.DOWN。注意,此舍入模式就是通常学校里讲的四舍五入。

    图示:

     

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -3
    -5.5 -6

     

     

     

     

     

     

     

     

     

    2.6 HALF_DOWN

    public final static int ROUND_HALF_DOWN = 5;
    
    

     

    定义:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向下舍入。

    解释:如果被舍弃部分 > 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同RoundingMode.DOWN。注意,此舍入模式就是通常讲的五舍六入。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -2
    -5.5 -5

     

     

     

     

     

     

     

     

     

    2.7 HALF_EVEN

    public final static int ROUND_HALF_EVEN = 6;

     

    
    

     

    定义:向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

    解释:如果舍弃部分左边的数字为奇数,则舍入行为同 RoundingMode.HALF_UP;如果为偶数,则舍入行为同RoundingMode.HALF_DOWN。

    注意,在重复进行一系列计算时,根据统计学,此舍入模式可以在统计上将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。此舍入模式类似于 Java 中对float 和double 算法使用的舍入策略。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 2
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -2
    -5.5 -6

     

     

     

     

     

     

     

     

     

    2.8 UNNECESSARY

    public final static int ROUND_UNNECESSARY =  7;

     

    
    

     

    定义:用于断言请求的操作具有精确结果,因此不发生舍入。

    解释:计算结果是精确的,不需要舍入,否则抛出 ArithmeticException。

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 抛出 ArithmeticException
    2.5 抛出 ArithmeticException
    1.6 抛出 ArithmeticException
    1.1 抛出 ArithmeticException
    1.0 1
    -1.0 -1
    -1.1 抛出 ArithmeticException
    -1.6 抛出 ArithmeticException
    -2.5 抛出 ArithmeticException
    -5.5 抛出 ArithmeticException
  • 相关阅读:
    DotNet友元程序集解析
    fastadmin如何在列表操作列区域添加按钮及控制已有按钮显示
    PHP合成透明图片
    linux系统下执行定时任务的全过程
    关于阿里云简单文件上传OSS思路整理服务器上的文件上传到OSS
    PHP图片和文字合成函数刚刚出炉
    关于在fastadmin后台AJAX上传图片或者视频增加额外参数的办法
    标记一下关于fastadmin在列表页获取视频时长并且AJAX提交到后端正常显示的过程
    关于phpexcel导出65535的解决思路
    PHP原生代码集成腾讯云对象存储 COS整个过程源码方式
  • 原文地址:https://www.cnblogs.com/alagong/p/9866092.html
Copyright © 2011-2022 走看看