Java算法第三次总结

本周学了高精度算法和全排列
对于高精度算法而言,在Java中主要靠一些函数来实现,例如
整数的运算用:BigInteger
小数的运算用:BigDecimal
这两种运算均属于Java.math.*包

BIgInteger:

一般用到以下构造器:
BigInteger(String val):根据字符串构建BigInteger对象

基本函数:
1.valueOf(parament); 将参数转换为制定的类型

比如 int a=3;

BigInteger b=BigInteger.valueOf(a);

则b=3;

String s=”12345”;

BigInteger c=BigInteger.valueOf(s);

则c=12345;

2.add(); 大整数相加

BigInteger a=new BigInteger(“23”);

BigInteger b=new BigInteger(“34”);

a. add(b);

3.subtract(); 相减

4.multiply(); 相乘

5.divide(); 相除取整

6.remainder(); 取余

7.pow(); a.pow(b)=a^b

8.gcd(); 最大公约数

9.abs(); 绝对值

10.negate(); 取反数

11.mod(); a.mod(b)=a%b=a.remainder(b);

12.max(); min();

13.punlic int comareTo();

14.boolean equals(); 是否相等

15.BigInteger构造函数:

常用的方法举例:
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数 相除只保留整数部分。
BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

BigDecimal

BigDecimal的构造器
①public BigDecimal(double val)
②public BigDecimal(String val)

常用的方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

import java.math.BigInteger;
import java.util.Scanner;

public class Text1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String a=scanner.next();
        String b=scanner.next();


        BigInteger A = new BigInteger(a);
        BigInteger B = new BigInteger(b);

        System.out.println(A.add(B));

    }
}

这是本周的高精度算法第一题,一道特别基础的题,但是写的时候还是出现了一些问题,例如第一次接收的时候用了Int型接收,报错了,还有就是用BigInteger b=BigInteger.valueOf(a);来转换类型的时候a需要为long型,所以更为合适的还是用String类型接收,然后通过BigInteger A = new BigInteger(a);将其转换为高精度的整数。后边的练习题234都是一些基本语法的联系,只需将本题中A.add(B)中的add方法更换成需要的相应方法即可。

import java.math.BigInteger;
import java.util.Scanner;

public class Text1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s[][]=new String[10][10];
        BigInteger S[][]=new BigInteger[10][10];
        String sum0 = "1";
//        String r1 = "10";
//        String r2 = "0";
//        BigInteger R1=new BigInteger(r1);
//        BigInteger R2=new BigInteger(r2);
//        int a=0;
        BigInteger sum = new BigInteger(sum0);
        for (int i = 0;i<s.length;i++){
            for (int j=0;j<s[i].length;j++){
                s[i][j]=scanner.next();
            }
        }
        for (int i = 0;i<S.length;i++){
            for (int j=0;j<S[i].length;j++){
                S[i][j] = new BigInteger(s[i][j]);
                sum=sum.multiply(S[i][j]);
            }
        }
        System.out.println(sum);
//        while (sum.remainder(R1) == R2) {
//                a++;
//                sum = sum.divide(R1);
//        }
//
//        System.out.println(a);

    }
}

这个是第五题的代码,本来试图用取余直接输出答案,但是一直得不到答案,所以去找了一下答案,发现这是道蓝桥杯的填空题,都是输出所得的乘积然后数的结尾有几个“0”。所以代码就是这样,还是用multiply方法求出乘积即可,要注意的是可以用BigInteger S[][]=new BigInteger[10][10];直接定义BigInteger的数据类型。
本周总结就到这了,下周继续努力,加油加油加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值