赞
踩
a.add(b);
subtract:-
multiply:*
divide:/
pow:a.pow(b)=a^b
a.gcd,abs():公约数,绝对值
mod:a.mod(b)=a%b;
//到商和余数 返回数组
System.out.println(a.divideAndRemainder(b)[1]);
compareTo方法来比较,小于则返回-1,等于则返回0,大于则返回1
BigInteger a1 = new BigInteger(“1”);
BigInteger a2 = new BigInteger(“2”);
a1.compareTo(a2);
十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf(“FFFF”,16).toString()
八进制转成十进制
Integer.valueOf(“876”,8).toString()
二进制转十进制
Integer.valueOf(“0101”,2).toString()
BigInteger的构造函数
BigInteger(String src)默认参数字符串为10进制数值
BigInteger(String src, int x)
第2个参数x是指定第一个参数src的进制类型
toString方法
toString()默认把数值按10进制数值转化为字符串。
toString(int x)把数值按参数x的进制转化为字符串。
时间复杂度为 O(n)。
(还不会)
import java.math.BigInteger;
import java.util.Arrays;
/**
* Created by MGL on 2017/4/21.
*/
public class BigInteger_Sqrt{
public static void main(String[] args) {
String str = "846516548651346132456465132189465134894651645613";
BigInteger n1 = new BigInteger(str);
BigInteger multiply = n1.multiply(n1);
int length = multiply.toString().length();
System.out.println("数的长度 = " + length);
long start = System.nanoTime();
BigInteger sqrt = getSqrt(multiply);
long end = System.nanoTime();
System.out.println(end - start);
System.out.println("对" +length +"位数进行开放运算所需要的时间 = " + (end - start)/1000000000F + "s");
System.out.println("运算结果 = " + (sqrt.compareTo(n1) == 0));
}
private static BigInteger getSqrt(BigInteger num) {
String s = num.toString();
int mlen = s.length(); //被开方数的长度
int len; //开方后的长度
BigInteger beSqrtNum = new BigInteger(s);//被开方数
BigInteger sqrtOfNum; //存储开方后的数
BigInteger sqrtOfNumMul; //开方数的平方
String sString;//存储sArray转化后的字符串
if (mlen % 2 == 0) len = mlen / 2;
else len = mlen / 2 + 1;
char[] sArray = new char[len];
Arrays.fill(sArray, '0');//开方数初始化为0
for (int pos = 0; pos < len; pos++) {
//从最高开始遍历数组,
//每一位都转化为开方数平方后刚好不大于被开方数的程度
for (char ch = '1'; ch <= '9'; ch++) {
sArray[pos] = ch;
sString = String.valueOf(sArray);
sqrtOfNum = new BigInteger(sString);
sqrtOfNumMul = sqrtOfNum.multiply(sqrtOfNum);
if (sqrtOfNumMul.compareTo(beSqrtNum) == 1) {
sArray[pos] -= 1;
break;
}
}
}
return new BigInteger(String.valueOf(sArray));
}
}
对象排序
class Item implements Comparable{
int val;
int loc;
Item(int v,int l){
val=v;
loc=l;
}
public int compareTo(Object o) {
return this.val - ((Item) o).getVal();
}
public int getVal() {
return val;
}
public int getLoc() {
return loc;
}
}
再用Arrays.sort(arr)就可以排序了
[ATTENTION]
凡逆序对此处用树状数组解决,步骤:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。