本周学了高精度算法和全排列
对于高精度算法而言,在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的数据类型。
本周总结就到这了,下周继续努力,加油加油加油。