如果使用C++进行大数运算,需要使用数组模拟计算过程,如果涉及到加减乘除甚至乘方,问题就变得相当麻烦,为了避免这些不必要的麻烦,可以使用java的BigInteger类或者Python来处理,在这里使用java
- java处理高精度计算只需要注意一点,就是熟悉BigInteger类的使用方法,其余问题都在于题目本身
例题
- 这个题需要把输入弄明白,他是通过0的个数来确定数据组数的
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int k = 0;
int n = input.nextInt();
BigInteger ans = BigInteger.ZERO;
while(k < n){
BigInteger m = input.nextBigInteger();
if(m.compareTo(BigInteger.ZERO) == 0){
if(k != 0) System.out.println();
System.out.println(ans);
k++;
ans = BigInteger.ZERO;
}else{
ans = ans.add(m);
}
}
}
}
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while(input.hasNext()){
int n = input.nextInt();
BigInteger ans = BigInteger.ONE;
for(int i=2;i<=n;i++){
ans = ans.multiply(BigInteger.valueOf(i));
}
System.out.println(ans);
}
}
}
- 通过本题可以掌握如何开大数数组、大数赋值方法、大数比较方法
- 注意题目里fibonacci的起始值
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
BigInteger a, b;
BigInteger[] Data = new BigInteger[1500];
Data[1] = new BigInteger("1");
Data[2] = new BigInteger("2");
for(int i=3;i<=1200;i++){
Data[i] = Data[i - 1].add(Data[i - 2]);
}
while(true){
int ans = 0;
a = input.nextBigInteger();
b = input.nextBigInteger();
if((a.compareTo(BigInteger.ZERO) == 0 &&
b.compareTo(BigInteger.ZERO) == 0)){
break;
}else{
for(int i=1;i<=1200;i++){
if((a.compareTo(Data[i]) <= 0 &&
b.compareTo(Data[i]) >= 0))
ans++;
}
}
System.out.println(ans);
}
}
}
- 这个题用到BigDecimal方法,前导0和后缀0的问题在这道题里面体现的淋漓尽致,String的charAt方法判断整数位是不是0,stripTrailingZeros去后缀0,toPlainString去科学计数法,转换浮点数为字符串
import java.math.BigDecimal;
import java.math.BigInteger;
import java.lang.String;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNext()){
BigDecimal base = input.nextBigDecimal();
int power = input.nextInt();
String s = base.pow(power).stripTrailingZeros().toPlainString();
if(s.charAt(0) == '0') s = s.substring(1);
System.out.println(s);
}
}
}
参考博客
https://blog.csdn.net/weixin_44259720/article/details/87002816