为了熟悉java , 开一套poj大数处理的题来写.

-------------------------------------------------------------------

A:

  (1)主要时间花在在处理输入上:

  System.setIn(new FileInputStream("test.txt"));

  相当于C++ 里面的   freopen("test.txt","r",stdin);

  System.setOut(new FileOutputStream("ans.out"));

  相当于C++里面的    freopen("ans.out","w",stdout);

  它应该要加在  Scannercin = new Scanner (System.in); 的前面;

  (2)cin.hashNext()  用来判断读入结束;

  

  文件输入输出:

  BufferedReader rd = new BufferedReader(new FileReader("lottery.in"));

  PrintWriter ot = new PrintWriter("lottery.out");

  Scanner in = new Scanner(rd);

  ot.println(ansBigInteger);

  rd.close();

  ot.close();

import java.io.*;
import java.math.*;
import java.util.Scanner; public class Main
{
public static void main(String[] args) throws FileNotFoundException
{
// System.setIn(new FileInputStream("test.txt"));
Scanner cin = new Scanner (System.in); String str;
BigDecimal ans,cur,eight; while (cin.hasNext())
{
eight = BigDecimal.valueOf(8);
ans = BigDecimal.valueOf(0);
cur = BigDecimal.valueOf(1); str = cin.nextLine();
int pos = str.indexOf(".");
BigDecimal tmp;
for (int i = pos+1 ; i < str.length(); i++)
{
cur = cur.divide(eight);
tmp = BigDecimal.valueOf(str.charAt(i)-'0'); tmp = tmp.multiply(cur);
ans = ans.add(tmp);
}
System.out.println(str+" [8]"+" = "+ans+" [10]");
}
System.exit(0);
}
}

B:

  (1)void main要设成 static , 于是所有要调用的函数都要用static修饰;

  (2)BigIntegerans ans = BigInteger.valueOf(0);  //可以得到一个值为int的 大数 ans

  (3)大数ans的加/减/乘/除/都可以通过调用 ans.add(t) / add.subtract(t) / ans.multiply(t) /ans.divide(t) ; 参数t 必须也是大数;

 import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner; public class Main
{
static private int maxn = 110;
static BigInteger dp[] = new BigInteger[maxn];
static BigInteger unvis = BigInteger.valueOf(-1); static private BigInteger getVal(int n)
{
BigInteger ans;
ans = BigInteger.valueOf(n);
/*
for (int i=1 ; i<=n ; i++ )
ans = ans.multiply( BigInteger.valueOf(2) );
ans = ans.subtract(BigInteger.valueOf(1));*/
return ans;
}
static private BigInteger solv(int n)
{
BigInteger ans = BigInteger.valueOf(0);
BigInteger tmp;
int i;
if (dp[n] != unvis) return dp[n];
// System.out.println("n="+n);
for ( i=1 ; i<=n ; i++ )
{
tmp = getVal(i);
tmp = tmp.multiply(solv(n-i));
// System.out.println("i="+i+" tmp="+tmp);
ans = ans.add(tmp);
}
return dp[n] = ans;
} static public void main(String[] args) throws FileNotFoundException
{
Scanner cin = new Scanner(System.in);
int n;
while (cin.hasNext())
{
n = cin.nextInt();
Arrays.fill(dp, unvis);
dp[0] = BigInteger.valueOf(1);
System.out.println(solv(n));
}
System.exit(0);
} }

C:

  (1)大数的进制转换:

   BigInter m = new BigInteger(st, base); // st以base进制转换成10进制

   类似的进制转换还有:

   String str = Integer.toString(num, base); // 把num当做10进制的数转成base进制的str(base <= 35).

   int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int

  (2)关于字符串的操作:

   java的string是不可变类型,需要进行各种修改赋值操作的话,还是用stringBuffer比较方便

   相关资料

 import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigInteger;
import java.util.Scanner; public class Main
{
static BigInteger trans[] = new BigInteger[1000];
static char retrans[] = new char[1000];
static String TransToString(BigInteger ans,BigInteger base)
{
StringBuffer res = new StringBuffer();
BigInteger zero = BigInteger.valueOf(0);
if (ans.compareTo(zero) == 0)
{
res = res.append(0);
return res.toString();
}
while (ans.compareTo(zero) > 0)
{
int tmp = ans.mod(base).intValue();
res = res.append(retrans[tmp]);
ans = ans.divide(base);
}
res = res.reverse();
return res.toString();
}
static String getAns(String str,BigInteger base1,BigInteger base2)
{
int len = str.length(),i;
char[] ch = str.toCharArray();
BigInteger cur = BigInteger.valueOf(1);
BigInteger ans = BigInteger.valueOf(0);
for ( i=len-1 ; i>=1 ; i-- )
{
BigInteger tmp = trans[ch[i]].multiply(cur);
cur = cur.multiply(base1);
ans = ans.add(tmp);
}
String resString = TransToString(ans,base2);
return resString;
}
static void initTrans()
{
int idx=0;
char i;
for ( i='0' ; i<='9' ; i++ ) {trans[i] = BigInteger.valueOf(idx++); retrans[idx-1]=i;}
for ( i='A' ; i<='Z' ; i++ ) {trans[i] = BigInteger.valueOf(idx++); retrans[idx-1]=i;}
for ( i='a' ; i<='z' ; i++ ) {trans[i] = BigInteger.valueOf(idx++); retrans[idx-1]=i;}
}
static public void main(String[] argStrings) throws FileNotFoundException
{
// System.setIn(new FileInputStream("test.txt"));
Scanner cin = new Scanner(System.in);
String str;
initTrans();
int cas;
BigInteger base1,base2;
String ans;
cas = cin.nextInt();
for (int i = 0; i < cas; i++)
{
base1 = cin.nextBigInteger();
base2 = cin.nextBigInteger();
str = cin.nextLine();
ans = getAns(str, base1, base2);
System.out.println(base1+str);
System.out.println(base2+" "+ans);
System.out.println();
}
System.exit(0);
}
}

  JAVA中的重定向:

  

  

Java Fuck Bignumber的更多相关文章

  1. 2017福建省赛 FZU2272~2283

    1.FZU2272 Frog 传送门:http://acm.fzu.edu.cn/problem.php?pid=2272 题意:鸡兔同笼通解 题解:解一个方程组直接输出就行 代码如下: #inclu ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. Java的大数计算BigNumber

    Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, wit ...

  4. Java之数组篇

    动手动脑,第六次Tutorial--数组 这次的Tutorial讲解了Java中如何进行数组操作,包括数组声明创建使用和赋值运算,写这篇文章的目的就是通过实际运用已达到对数组使用的更加熟练,下面是实践 ...

  5. Java(数组)动手动脑

    1>数组作为方法参数 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 源代码: // PassArray.java // Pas ...

  6. java中四种阶乘的计算

    package com.zf.s2;//创建一个包   import java.math.BigInteger;//导入类 import java.util.ArrayList; import jav ...

  7. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

  8. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  9. 算法笔记_034:大整数乘法(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法   1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...

随机推荐

  1. 算法导论(第三版)Exercises4.2(第四章二节)

    4.2-1(计算结果) 18  14 62  66 4.2-2(Strassen算法计算矩阵乘法) void multiplyMatrix(int a[], int b[], int n, int r ...

  2. python3-day5(模块)

    1.获取路径import os,sys #获取全部路径 print(os.path.abspath(__file__)) #获取目录 print(os.path.dirname(os.path.abs ...

  3. Windows系统下nodejs安装及配置

    关于nodejs中文站,眼下活跃度最好的知识站应该是http://www.cnodejs.org/ ,而http://cnodejs.org/则活跃度较低.Express.js是nodejs的一个MV ...

  4. 生命周期-初识IOS

    经常因为生命周期的事情,而视图顺序加载错误,或者出现一系列的小错误并且修改不出来,程序员不知道生命周期确实挺可悲的. IOS生命周期: 自上而下的执行,并且viewDidLoad只会执行一次,所以我们 ...

  5. Hacker(18)----了解Windows系统漏洞

    一.WinXP中的漏洞 在WinXP中,常见的漏洞主要有UPNP服务漏洞.帮助与支持中心漏洞.压缩文件夹漏洞.服务拒绝漏洞.RDP漏洞以及热键漏洞. 1.UPNP服务漏洞 漏洞描述:UPNP(Univ ...

  6. 解决System.Data.SQLite兼容32位和64位问题

    将当前说明文档的目录下的x64.x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用,引用System.Data.SQLite.dll即可,两目录中的不 ...

  7. Paros抓包工具

    http://www.hackbase.com/article-1593-1.html http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1& ...

  8. js-Array

    1.合并数组 var a = ["aaa", "aaaa"];var b = ["bbb", "bbbb", " ...

  9. [Leetcode] Merge Sorted Array (C++)

    我在Github上新建了一个解答Leetcode问题的Project, 大家可以参考, 目前是Java 为主,里面有leetcode上的题目,解答,还有一些基本的单元测试,方便大家起步. 题目: Gi ...

  10. linux查看磁盘空间

    首先如果需要查看整个磁盘还剩多少空间,可以使用命令: df -h 如果你并不关心磁盘还剩余多少空间,只是需要知道当前的文件夹下的磁盘使用情况,可以使用如下命令: -h 上面使用du --max-dep ...