Java中的BigInteger在ACM中的应用

在ACM中的做题时,常常会遇见一些大数的问题。这是当我们用C或是C++时就会认为比較麻烦。就想有没有现有的现有的能够直接调用的BigInter,那样就方便非常多啦。在java中就有的,所以在这儿我就做一个简要的介绍吧

—:在java中的基本头文件(java中叫包)

import java.io.*

importjava.util.*       我们所用的输入scanner在这个包中

importjava.math.*          我们以下要用到的BigInteger就这这个包中

二:输入与输出

读入 Scanner cin=new Scanner(System.in)

While(cin.hasNext())   //相当于C语言中的!

=EOF

n=cin.nextInt();       //输入一个int型整数

n=cin.nextBigInteger();   //输入一个大整数

System.out.print(n);      //输出n但不换行

System.out.println();     //换行

System.out.println(n);    //输出n并换行

System.out.printf(“%d\n”,n);     //类似C语言中的输出

三:定义变量

定义单个变量:

int a,b,c;      //和C++ 中无差别

BigInteger  a;   //定义大数变量a

BigIntegerb=new BigInteger("2");   //定义大数变量 b赋值为 2;

BigDecimaln;     //定义大浮点数类 n;

定于数组:

int a[]= new int[10]   //定义长度为10的数组a

BigInteger  b[] =new BigInteger[100]   //定义长度为100的数组a

四:表示范围

布尔型 boolean 1 true,false false

字节型 byte 8 -128-127 0

字符型 char 16 ‘\u000’-\uffff ‘\u0000’

短整型 short 16 -32768-32767 0

整型 int 32 -2147483648,2147483647 0

长整型 long 64 -9.22E18,9.22E18 0

浮点型 float 32 1.4E-45-3.4028E+38 0.0

双精度型 double 64 4.9E-324,1.7977E+308 0.0

BigInteger随意大的数,原则上仅仅要你的计算机内存足够大。能够有无限位

五:经常使用的一些操作

A=BigInteger.ONE;   //把0赋给A

B=BigInteger.valueOf(3);    //把3赋给B。

A[i]=BigInteger.valueOf(10);    //把10赋给A[i]

c=a.add(b)        //把a与b相加并赋给c

c=a.subtract(b)   //把a与b相减并赋给c

c=a.multiply(b)   //把a与b相乘并赋给c

c=a.divide(b)     //把a与b相除并赋给c

c=a.mod(b)        // 相当于a%b

a.pow(b)          //相当于a^b

a.compareTo(b):      //依据该数值是小于、等于、或大于a 返回 -1、0 或 1;

a.equals(b):    //推断两数是否相等,也能够用compareTo来取代;

a.min(b),a.max(b):  //取两个数的较小、大者;

注意以上的操作都必须是BigInteger类的。

给以例子POJ  2506

代码:

import java.math.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
BigInteger a[] = new BigInteger[300];
BigInteger b=new BigInteger("2");
a[0]=BigInteger.valueOf(1);
a[1]=BigInteger.valueOf(1);
a[2]=BigInteger.valueOf(3);
a[3]=BigInteger.valueOf(5);
int n; for(int i=3;i<=255;i++)
{
a[i]=a[i-1].add(a[i-2].multiply(b));
}
while(cin.hasNext())
{
n=cin.nextInt();
System.out.println(a[n]);
}
}
}

最新文章

  1. Batis-iBatis基本操作(增删改查)
  2. flask+sqlite3+echarts3+ajax 异步数据加载
  3. SQL Server安全(2/11):身份验证(Authentication)
  4. float 和 inline-block的心得
  5. Visual Studio 开发平台的安装与单元测试
  6. mysql 时间格式与日期格式转换,去除datetime中的具体时间
  7. linux5
  8. html5图片懒加载
  9. C#遍历hashtable
  10. mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
  11. I-frame、B-frame、P-frame及DTS、PTS的关系(转)
  12. Emacs学习阶段小结-Emacs常用快捷键总结
  13. 【04】基础:将采集结果转成Excel
  14. 关于用css实现文本和图片垂直水平居中
  15. 记一次Java的内存泄露分析
  16. MySql入门(1)
  17. 4天精通arcgis
  18. 【php】PHP环境整合
  19. 【MySQL】5.7 复制
  20. Java学习---流与文件

热门文章

  1. Leetcode37---&gt;Sudoku Solver(填充数独)
  2. 大数据学习——spark-steaming学习
  3. dev c++ 提示没有iostream.h文件
  4. 用Navicat Premium快速查看mysql数据库版本信息
  5. 飞行员配对方案问题(匈牙利算法+sort)
  6. ZOJ 3772 Calculate the Function 线段树+矩阵
  7. Session挂起
  8. C 语言 文件读写
  9. pexpect模块
  10. svn不是内部或外部命令?