板子一
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static BigDecimal gold = new BigDecimal("1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788");
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//定义输入
while(sc.hasNext()) {
BigDecimal a = new BigDecimal(sc.next());//输入
BigDecimal b = new BigDecimal(sc.next());
if(a.compareTo(b)==1) {//compareTo比较函数,如果a>b返回1, a<b返回-1,a==b返回0;
BigDecimal c=a;
a=b;
b=c;
}
BigDecimal temp = b.subtract(a).multiply(gold).subtract(a);
//if(a!=floor(k*gold)
if(temp.compareTo(BigDecimal.ONE)==-1 && temp.compareTo(BigDecimal.ZERO)==1)
System.out.println(0);
else
System.out.println(1);
}
}
}
1. b1.add(b2).doubleValue();//表示b1+b2的结果转换成double型
add//加法 subtract//减法 multiply//乘法 divide //除法
2.for(int i=1;i<=n;i++) { ans=ans.multiply(BigInteger.valueOf(i)); }
//Ans为大数,所以要把i转换为大数类型
3.String s=ans.toPlainString();
if(s.charAt(0)=='0') {//charAt(n)返回字符串中下标为n的字符
s=s.substring(1);
}
//d为int型,a,b,c都为大数
c=a.add(b); // 相加
c=a.subtract(b); // 相减
c=a.multiply(b); // 相乘
c=a.divide(b); // 相除取整
c=a.gcd(b); // 最大公约数
c=a.remainder(b); // 取余
c=a.mod(b); // a mod b
c=a.abs(); // a的绝对值
c=a.negate(); // a的相反数
c=a.pow(d); // a的b次幂 d为int型
c=a.max(b); // 取a,b中较大的
c=a.min(b); // 取a,b中较小的
d=a.compareTo(b); //比较a与b的大小 d=-1小于d=0等于 d=1大于 d为int型
a.equals(b); // 判断a与b是否相等 相等返回true 不相等返回false
d=a.intValue(); // 将大数a转换为 int 类型赋值给 d
e=a.longValue(); // 将大数a转换为 long 类型赋值给 e
f=a.floatValue(); // 将大数a转换为 float 类型赋值给 f
g=a.doubleValue(); // 将大数a转换为 double 类型赋值给 g
s=a.toString(); // 将大数a转换为 String 类型赋值给 s
<span style="color:#ff0000;">s=a.toPlainString(); //将大数a转换为String类型赋值给s,且不表示为科学计数法</span>
a=BigInteger.valueOf(e); // 将 e 以大数形式赋值给大数 a e只能为long或int
a=newBigInteger(s, d); // 将s数字字符串以d进制赋值给大数a如果d=s字符数字的进制则等同于将数字字符串以大数形式赋值给大数a
String st = Integer.toString(num, base); //把int型num当10进制的数转成base进制数存入st中 (base <= 35).
int num = Integer.parseInt(st, base); //把st当做base进制,转成10进制的int
(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.
BigInteger a;
int b;
Stringc;
a=cin.nextBigInteger(b); //以b进制读入一个大数赋值给a
c=a.toString(b); // 将大数a以b进制的方式赋给字符串c
a=newBigInteger(c, b); //把c 当做“b进制“转为十进制大数赋值给a
大数高精度求sqrt(n)
BigDecimal one = new BigDecimal(1);
BigDecimal two = new BigDecimal(2);
BigDecimal three = new BigDecimal(3);
BigDecimal five = new BigDecimal(5);
BigDecimal l=new BigDecimal(2),r=new BigDecimal(3);
for(int i=0; i<1000; ++i)
{
BigDecimal mid=r.add(l).divide(two); //因为sqrt(5)是在2到3之间
if(mid.multiply(mid).compareTo(five)<0)
{
l=mid;
}
else r=mid;
}
一个是 BigDecimal.stripTrailingZeros(),作用是将BigDecimal转化为最简形式(去掉末尾多余的0或小数点)
还有 BigDecimal.toPlainString() ,作用是将BigDecimal转为字符串,因为小数位数过多的话会被输出成科学计数法表示,不希望那样的话就要用到这个方法;
import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;
public class Main
{
public static void main(String[] args)
{
Scanner cin = new Scanner(new BufferedInputStream(System.in));
BigDecimal a,b,c;
while(cin.hasNext())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
c=a.add(b);
c=c.stripTrailingZeros();
String s=c.toPlainString();
System.out.println(s);
// 以上四行也可直接写成
// System.out.println(a.add(b).stripTrailingZeros().toPlainString());
}}}