1.相关知识点
实验 4 处理大整数
程序有时需要处理大整数,java.math 包中的 BigInteger 类提供任意精度的
整数运算。可以使用构造方法:
public BigInteger(Sring val)
构造一个十进制的 BigInteger 对象。该构造方法可以发生
NumberFormatException 异常,也就是说,字符串参数 val 中如果含有非数字字母
就会发生 NumberFormatException 异常。
2.实验目的
本实验的目的是让学生掌握 BigInteger 类的常用方法。
3.实验要求
编写一个 java 应用程序,计算 2 个大整数的和、差、积、商,并计算出一个
大整数的因子个数(因子中不包括 1 和大整数本身)。
4.运行效果示例
程序运行结果如图所示:
5.程序模板
//HandBigIntegerExample.java
import java.math.*;
class BigIntegerExample
{
public static void main(String args[])
{
BigInteger n1 = new BigInteger("987654321987654321987654321"),
n2 = new BigInteger("123456789123456789123456789"),
result = null;
result = n1.add(n2);
System.out.println("和:" + result.toString());
result = n1.subtract(n2);
System.out.println("差:" + result.toString());
result = n1.multiply(n2);
System.out.println("积:" + result.toString());
result = n1.divide(n2);
System.out.println("商:" + result.toString());
BigInteger m = new BigInteger("17637"),
COUNT = new BigInteger("0"),
ONE = new BigInteger("1"),
TWO = new BigInteger("2");
System.out.println(m.toString() + "的因子有:");
for (BigInteger i = TWO;i.compareTo(m) < 0;i = i.add(ONE))
{
if((m.remainder(i).compareTo(BigInteger.ZERO))==0)
{
COUNT = COUNT.add(ONE);
System.out.print(" " + i.toString());
}
}
System.out.println("");
System.out.println(m.toString() + "一共有" + COUNT.toString() +
"个因子");
}
}
6.实验指导
只要计算机的内存足够大,就可以处理任意大的整数。BigInteger 类的
toString()方法返回当前大整数对象十进制的字符串表示。
7.实验后练习
(1)编写程序,计算大整数的阶乘。
//HandBigIntegerExample1.java
import java.math.*;
class BigIntegerExample1
{
public static void main(String args[])
{
BigInteger n1 = new BigInteger("50");
BigInteger n2 = new BigInteger("1");
BigInteger one = new BigInteger("1");
for(BigInteger i=one;i.compareTo(n1) <=0;i = i.add(one))
{
n2=n2.multiply(i);
}
System.out.println(n1.toString() + "的阶乘为:" + n2.toString());
}
}
(2)编写程序,计算 1+2+3...的前 99999999 项的和。
//HandBigIntegerExample2.java
import java.math.*;
class BigIntegerExample2
{
public static void main(String args[])
{
BigInteger n1 = new BigInteger("99999999");
BigInteger n2 = new BigInteger("0");
BigInteger one = new BigInteger("1");
for(BigInteger i=one;i.compareTo(n1) <=0;i = i.add(one))
{
n2=n2.add(i);
}
System.out.println("前" + n1.toString() + "项的和为:" +
n2.toString());
}
}
8.填写实验报告