博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java大数 - 大整数BigInteger
阅读量:4047 次
发布时间:2019-05-25

本文共 3759 字,大约阅读时间需要 12 分钟。

BigInteger的基本用法: 

// 新建一个值为777的大整数的对象BigInteger a = new BigInteger("777");   //参数可以是字符串BigInteger b = BigInteger.valueOf(77); //参数可以使int,longSystem.out.println("a = "+a);System.out.println("b = "+b);	 //大整数的四则运算BigInteger c = a.add(b);System.out.println("a + b = "+c);c = a.subtract(b);System.out.println("a - b = "+c);c = a.divide(b);System.out.println("a / b = "+c);c = a.multiply(b);System.out.println("a * b = "+c);		 //大整数比较大小boolean d = a.equals(b); //如果a和b相等返回true 否则返回falseSystem.out.println("a > b ? "+d);		int e = a.compareTo(b); //如果a小于b返回-1,等于返回0,大于返回1System.out.println("a > b = "+e);		 //常用的方法  //求余数c = a.mod(b);System.out.println("a % b = "+c);  //求最大公约数c = a.gcd(b);System.out.println("gcd(a,b) = "+c);  //求最大值c = a.max(b);System.out.println("max(a,b) = "+c);  //求最小值c = a.min(b);System.out.println("min(a,b) = "+c);		 //BigInteger中的常数System.out.println("大整数0 = "+BigInteger.ZERO);System.out.println("大整数1 = "+BigInteger.ONE);System.out.println("大整数10 = "+BigInteger.TEN);		 //求大整数的位数int f = a.toString().length();System.out.println("a的位数 = "+f);		 //返回大整数的符号  正数1  0     负数-1System.out.println("a的符号 "+a.signum());

上述的输出:

a = 777b = 77a + b = 854a - b = 700a / b = 10a * b = 59829a > b ? falsea > b = 1a % b = 7gcd(a,b) = 7max(a,b) = 777min(a,b) = 77大整数0 = 0大整数1 = 1大整数10 = 10a的位数 = 3a的符号 1

例题:

1.输入:不断地输入大整数直至文件尾

import java.math.BigInteger;import java.util.Scanner;public class Main {	public static void main(String[] args) {				Scanner cin = new Scanner(System.in);		System.out.println("输入连续的大数:");		while(cin.hasNext())//等同于 !=EOF		{			BigInteger h;			h = cin.nextBigInteger(); //读入一个BigInteger			System.out.println(h);		}		System.out.println("输入结束"); 			}}

2.:求两个不超过200位的非负整数的和。

import java.math.BigInteger;import java.util.Scanner;public class Main {		public static void main(String[] args) { 				BigInteger a,b;				Scanner cin = new Scanner(System.in);				a = cin.nextBigInteger();		b = cin.nextBigInteger();				System.out.println(a.add(b));	}}

3.大数阶乘:给一个n,计算n的阶乘,但是n很可能比较大

     分析:可以从1开始打一个阶乘表,这样的话当有输入的时候我们就可以用O(1)的复杂度解决它

import java.math.BigInteger;import java.util.Scanner;public class Main {    public static void main(String[] args) {        BigInteger f[] = new BigInteger[5500];        f[0] = f[1] = BigInteger.ONE;        for (int i = 2; i <= 5000; ++i) {            f[i] = f[i - 1].multiply(BigInteger.valueOf(i));        }        Scanner cin = new Scanner(System.in);        while (cin.hasNext()) {            int m = cin.nextInt();            System.out.println(f[m]);        }    }}

4.:计算第n项Fibonacci(斐波那契数列)数值,n可能比较大

import java.math.BigInteger;import java.util.Scanner; public class Main {	public static void main(String[] args) { 		Scanner cin = new Scanner(System.in); 		BigInteger[] nums = new BigInteger[1010];		nums[1] = new BigInteger("1");		nums[2] = new BigInteger("1");		for(int i = 3; i <= 1000; i++)			nums[i] = nums[i - 1].add(nums[i - 2]); 		int T = cin.nextInt();		while(T > 0)		{			T--;			int n = cin.nextInt();			System.out.println(nums[n]);		}	}}

5.:求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。即要输入n和B,输出(A/B)%9973。

    分析:因为a一定能被b整除,所以a一定是b的倍数,于是我们让a = b * i(i= 1,2,3···)直到a Mod b == n;就可以得到大整数a,就可以用题目中给的公式将正确答案做出来 。 

import java.math.BigInteger;import java.util.Scanner;public class Main {	public static void main(String[] args) {		Scanner cin = new Scanner(System.in);		int T = cin.nextInt();		while(T > 0)		{			T--;			BigInteger a = cin.nextBigInteger();			BigInteger b = cin.nextBigInteger();			BigInteger d = new BigInteger("9973");			BigInteger z = new BigInteger("0"); 			for(BigInteger i = new BigInteger("1"); ; i = i.add(new BigInteger("1")))			{				BigInteger c = b.multiply(i);				if(c.mod(d).compareTo(a) == 0)				{					System.out.println(i.mod(d));					break;				}			}		}	}}

 

转载地址:http://ttzci.baihongyu.com/

你可能感兴趣的文章
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>