Java 大数类
来源:互联网 发布:国立清华大学 知乎 编辑:程序博客网 时间:2024/06/03 17:08
大数阶乘
例如:5000!
代码如下:
import java.io.*;import java.math.BigInteger;import java.util.*;public class Main{public static void main(String args[]){Scanner cin = new Scanner(System.in);int n = cin.nextInt();BigInteger ans = BigInteger.ONE;for(int i = 1; i <= n; ++i)ans = ans.multiply(BigInteger.valueOf(i));System.out.println(ans);}}
棋盘覆盖
在一个2
k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
- 输入
- 第一行m表示有m组测试数据;
- 每一组测试数据的第一行有一个整数数k;
- 输出
- 输出所需个数s;
import java.math.BigInteger;import java.util.*;import java.io.*;public class Main{public static void main(String args[]){Scanner in = new Scanner(System.in);int test = in.nextInt();while(test-- > 0){int n;n = in.nextInt();BigInteger a = new BigInteger("4");for(int i = 1; i < n; ++i)a = a.multiply(BigInteger.valueOf(4));System.out.println(a.subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(3)));}}}
比较大小
给你两个很大的数,你能不能判断出他们两个数的大小呢?
比如123456789123456789要大于-123456
输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
如果a>b则输出“a>b”,如果a<b则输出“a<b”,如果相等则输出“a==b”。
代码如下:
import java.io.*;import java.math.BigInteger;import java.util.*;public class Main{public static void main(String args[]){Scanner cin = new Scanner(System.in);while(cin.hasNext()){BigInteger a = cin.nextBigInteger();BigInteger b = cin.nextBigInteger();if(a.equals(BigInteger.ZERO) && b.equals(BigInteger.ZERO))break;int flag = a.compareTo(b);if(flag == -1)System.out.println("a<b");else if(flag == 0)System.out.println("a==b");elseSystem.out.println("a>b");}}}
大数加法
代码如下:
import java.math.BigInteger;import java.util.*;import java.io.*;public class Main{public static void main(String args[]){Scanner in = new Scanner(System.in);int n = in.nextInt();for(int i = 1; i <= n; ++i){BigInteger a = in.nextBigInteger();BigInteger b = in.nextBigInteger();BigInteger ans = a.add(b);System.out.println("Case " + i + ":");System.out.println(a + " + " + b + " = " +ans);}}}
递推求值
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
对于输入的每一行输出A99的值
代码如下:
import java.io.*;import java.math.BigInteger;import java.util.*;public class Main{public static void main(String args[]){Scanner cin = new Scanner(System.in);BigInteger a[] = new BigInteger[100];while(cin.hasNext()){for(int i = 0; i <= 2; ++i)a[i] = cin.nextBigInteger();for(int i = 3; i <= 99; ++i)a[i] = a[i - 1].add(a[i - 2]).add(a[i - 3]);System.out.println(a[99]);}}}
高精度幂
对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。
现在要你解决的问题是:对一个实数R( 0.0< R < 99.999 ),要求写程序精确计算 R的 n次方(Rn),其中n是整数并且 0 < =n<= 25。
输入
输入有多行,每行有两个数R和n,空格分开。R的数字位数不超过10位。
输出
对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。
代码如下:
import java.io.*;import java.math.BigDecimal;import java.util.*;public class Main{public static void main(String args[]){Scanner cin = new Scanner(System.in);while(cin.hasNext()){BigDecimal ans = cin.nextBigDecimal();int n = cin.nextInt();String res = ans.pow(n).stripTrailingZeros().toPlainString(); //整数去掉小数点和后面的0if(res.startsWith("0")) //去掉前导0{res = res.substring(1);}System.out.println(res);}}}
- Java大数类解决大数加法
- java 大数类
- JAVA大数类练手
- JAVA大数类练手
- java大数类
- Java 大数类
- JAVA大数类
- JAVA大数类练手
- Java大数类应用
- JAVA大数类练手
- Java 大数类
- java处理大数类
- Java大数类介绍
- JAVA大数类
- Java 大数类
- Java大数类
- java中的大数类
- Java大数类用法
- ORA-01779错误的处理方法
- json-lib与jackson的比较
- [Cocoa]使用代码创建窗口
- dokan 开发实战
- ubuntu 下 python numpy,scipy,matplotlib安装
- Java 大数类
- C++第一课
- tcp accept函数
- crontable中的百分号“%”问题
- linux常用端口对照
- 构建Node.js应用的10个重要的方面
- java入门学习(十五)运算语句while do while
- 大家给个建议,java程序员,周六日,或平时想做点兼职,发现不知道做什么,求指教.
- 在apache的log中找出访问次数最多的N个IP。