为了熟悉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. poj 3692 Kindergarten (最大独立集之逆匹配)

    Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and al ...

  2. java bootstrap分页

    样式如下 datumMap.total总共多少页 datumMap.page第几页 <nav class="pull-right"> <ul class=&quo ...

  3. html li标签前面添加图标三种方法

    今天无聊写下这个例子,希望对初学者有帮助,代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf ...

  4. iphone UIScrollView缩放

    allImageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; allImageScrol ...

  5. 对easyui datagrid进行扩展,当滚动条拉直最下面就异步加载数据。

    以下方法是通用的,只要把datagrid定义为全局的即可,其他部分的代码不用进行修改! 可以把以下代码放入到一个单独的js文件,然后再需要的页面引入即可! $(function(){ try{ $(& ...

  6. JMeter Building a Database Test Plan

    Building a Database Test Plan In this section, you will learn how to create a basic Test Planto test ...

  7. 为iPhone 6设计自适应布局

    Apple从iOS 6加入了Auto Layout后开始就比较委婉的开始鼓励.建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心 ...

  8. 主运行循环main run loop的一些理解

    应用主运行循环负责处理所有用户相关的事件.UIApplication对象在应用启动时安装主运行循环并且使用此循环去处理事件和处理基于视图的界面更新.正如名字所表明的,该主运行循环是在应用的主线程app ...

  9. 使用DataReader

    string sqlStr="select * from tb_news"; SqlCommand myCmd=new SqlCommand(sqlStr,myConn); myC ...

  10. idea导入项目出错

    在idea导如项目后,总是会报错,每个类都会报错.解决的办法是: 1. 2.添加本地jdk 3.添加项目中的lib包