需要import java.math.*;
BigInteger:
add(BigInteger val); +
subtract(BigInteger val); -
multiply(BigInteger val); *
divide(BigInteger val); /
remainder(BigInteger val); %
compareTo(BigInteger val) <返回-1 ==返回0 >返回1
abs(); 绝对值
pow(int a) a次幂
toString() 返回十进制的字符串
toString(int p) 返回p进制的字符串
1.【高精度】蜜蜂路线(BigInteger add操作 BigInteger.ONE常数)
题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N ,1≤M<N≤1000,有多少种爬行路线?<n≤1000,有多少种爬行路线?
输入
M,N的值。
输出
一个数表示爬行路线种数。
分析:BigInteger 的斐波那契
import java.math.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int x = cin.nextInt(); int y = cin.nextInt(); y = y-x; BigInteger a[] = new BigInteger[1005]; a[0] = BigInteger.ONE; a[1] = BigInteger.ONE; //System.out.println(a[0]+" "+a[1]); for (int i=2;i<=y;i++) { a[i] = a[i-1].add(a[i-2]); } System.out.println(a[y]); } }
2.【高精度】Oliver的成绩
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { BigInteger a,b,c,max1,max2,max3; BigInteger x,y,z; Scanner cin = new Scanner(System.in); a = cin.nextBigInteger(); b = cin.nextBigInteger(); c = cin.nextBigInteger(); max1 = a; max2 = b; max3 = c; int n; n = cin.nextInt(); for(int i=0;i<n;i++) { x = cin.nextBigInteger(); y = cin.nextBigInteger(); z = cin.nextBigInteger(); if(max1.compareTo(x)<0) max1 = x; if(max2.compareTo(y)<0) max2 = y; if(max3.compareTo(z)<0) max3 = z; } BigInteger ans; ans = max1.subtract(a); System.out.print(ans+" "); ans = max2.subtract(b); System.out.print(ans+" "); ans = max3.subtract(c); System.out.print(ans); } }
BigDecimal
(java新手)需要注意的:
1.stripTrailingZeros() 去零 但是会是科学计数法
加个toPlainString()可以正常表示
2.作为java新手 才知道java中的String是不可以用下标(s[0])直接取的
而需要用函数charAt(int p)才可以取第p个字符
问题 N: 【高精度】幂运算
其他和BigInteger差不多
题目描述
小明的老师布置了一道幂运算题:一般情况下,计算机所能够处理的小数的范围和精度都是非常有限的。老师给出了一个小数a和指数b,让小明求ab。小明觉得手算非常麻烦,希望你能帮助他。
输入
共2行,第1行是a,第2行是b。O<a<l000,a的长度不超过10位,保证这个数字有一个小数点,但不保证这个数字有整数部分或小数部分。比如可以用‘.’代表0,但是这个数据不会出现。例如000.10会写成.10。1≤b≤25,为整数。
输出
只有1行,即a^b的结果。整数部分前面有0必须去掉,小数部分末尾有0也必须去掉。例如000.10100需要变为.101(整数部分为0也去掉)。输出部分必须有一个小数点。
样例输入
1.0100 12
样例输出
1.126825030131969720661201
import java.math.*; import java.util.*; public class Main { public static void main(String[] args) { BigDecimal a; Scanner cin = new Scanner(System.in); a = cin.nextBigDecimal(); int b = cin.nextInt(); a = a.pow(b); String s = a.stripTrailingZeros().toPlainString(); if(s.charAt(0)==‘0‘&&s.charAt(1)==‘.‘) { int len = s.length(); s = s.substring(1, len); //得到从1到len的字串 } System.out.println(s); } }
原文地址:https://www.cnblogs.com/hao-tian/p/9853576.html