java大法好,退C保平......开玩笑的;php
import java.math.*; // 包含大数类的包 import java.util.*; // 包含输入头的包
public class Main{ public static void main(String args[]){ Scanner cin = newScanner(System.in); // 输入必备句 } }
//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
例:hdu1250 http://acm.hdu.edu.cn/showproblem.php?pid=1250java
题目大意:斐波那契数列;ide
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()){ int n=cin.nextInt(); BigInteger ans[]=new BigInteger[10000]; //BigInteger tmp1=BigInteger.valueOf(1); //BigInteger tmp2=BigInteger.valueOf(1); ans[1]=ans[2]=ans[3]=ans[4]=BigInteger.ONE; for(int i=5;i<=n;i++) { ans[i]=ans[i-1].add(ans[i-2]).add(ans[i-3]).add(ans[i-4]); } System.out.println(ans[n]); } } }
例:hdu1753 http://acm.hdu.edu.cn/showproblem.php?pid=1753函数
题目大意:两个大数浮点数相加;spa
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin =new Scanner(System.in); while(cin.hasNext()){ BigDecimal a,b; while(cin.hasNext()){ a=cin.nextBigDecimal(); b=cin.nextBigDecimal(); System.out.println(a.add(b).stripTrailingZeros().toPlainString()); } } } }
PS: 有用java水了一道,这里注意下要求最简形式,可能会出现4.0或者1e5等形式,因此用stripTrailingZeros()函数去除末尾0,用toPlainString()函数转成广泛计数法输出。code