Java Fuck Bignumber
为了熟悉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的更多相关文章
- 2017福建省赛 FZU2272~2283
1.FZU2272 Frog 传送门:http://acm.fzu.edu.cn/problem.php?pid=2272 题意:鸡兔同笼通解 题解:解一个方程组直接输出就行 代码如下: #inclu ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java的大数计算BigNumber
Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, wit ...
- Java之数组篇
动手动脑,第六次Tutorial--数组 这次的Tutorial讲解了Java中如何进行数组操作,包括数组声明创建使用和赋值运算,写这篇文章的目的就是通过实际运用已达到对数组使用的更加熟练,下面是实践 ...
- Java(数组)动手动脑
1>数组作为方法参数 阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 源代码: // PassArray.java // Pas ...
- java中四种阶乘的计算
package com.zf.s2;//创建一个包 import java.math.BigInteger;//导入类 import java.util.ArrayList; import jav ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- Java开发笔记(三十四)字符串的赋值及类型转换
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...
- 算法笔记_034:大整数乘法(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...
随机推荐
- 关于我们-EIBOA易博男装-互联网品质男装品牌-在线销售男士西服,衬衫,外套,西裤,领带|全场免运费,30天退换货保障
关于我们 - 网站底部 | ELLE中国 | ELLE China 关于赫斯特国际集团 男人尚--专注男人时尚 关于男人尚 这些数据,你知道吗? 1.全国至少1亿男人的衬衫尺码错误: 2.57%的男人 ...
- Java之Map
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象. Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象. code ...
- poj 3186 Treats for the Cows(区间dp)
Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for gi ...
- html5 app图片预加载
function Laimgload(){} //图片预加载JS Laimgload.prototype.winHeight = function(){ //计算页面高度 var winHeight ...
- STL采用的标准模板库
一.map,set set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于 ...
- StoryBoard 加入一个自定义View
1. 建一个 UIView的子类(MyView.h/MyView.m) 2. 建一个 View类型的XIB 3. 把xib的file‘s owner设为MyView 4. 在.h文件里加上 @prop ...
- 数据库中的记录通过servlet回显到jsp页面中(连接数据库或者查询參照:对数据进行增删改查)
我们常常会用到通过图书的名称来查询图书那么这种话我们也就会使用到从数据库中搜索出数据而且载入到自己的Jsp页面中 这种话我们须要将从数据库中获取到的数据放进响应中然后通过%=request.getAt ...
- poj1014 Dividing (多重背包)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=1014">http://poj.org/problem?id=1014 Descrip ...
- C++11 多线程 基础
C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用 ...
- UITableView滑动按钮的操作
一.开题 首先先创建工程, 创建工程的步骤就不一一介绍了, 前面有提过, 接下来是要在VC上创建一个tableview当然你也可以选择一个类继承于UITableView两者都可以, 这要看个人喜欢了 ...