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 ...
随机推荐
- 深入理解linux网络技术内幕读书笔记(二)--关键数据结构
Table of Contents 1 套接字缓冲区: sk_buff结构 1.1 网络选项及内核结构 1.2 结构说明及操作函数 2 net_device结构 2.1 MTU 2.2 结构说明及操作 ...
- maven install 报错Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin
Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of ...
- (LeetCode)两个队列来实现一个栈
原题例如以下: Implement the following operations of a stack using queues. push(x) -- Push element x onto s ...
- HTTP协议具体解释
HTTP是一个属于应用层的面向对象的协议.因为其简捷.高速的方式.适用于分布式超媒体信息系统. 它于1990年提出,经过几年的使用与发展,得到不断地完好和扩展.眼下在WWW中使用的是HTTP/1.0的 ...
- Building bridges_hdu_4584(排序).java
Building bridges Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- JavaScript 滚动页面到指定元素位置
页面评论功能,当评论较多时,有时须要滚动到评论头部. 能够使用scrollTop方法,加上一点延时动画(animate),可訪问在线演示,代码大体例如以下: <html> <scri ...
- Java 学习第一天
java 学习路线 http://edu.csdn.net/main/studyline/heimaline.html?flz java 学习视频 —— 马士兵:毕向东
- C++类的继承实例
首先由三个类分别为DateType(日期类).TimeType(时间类).DateTimeType(日期时间内).详细代码例如以下: #include <iostream> using n ...
- work staff
培训一周,很抓狂.不是抓狂培训本身,是自己听不懂,培训还是有用的. 上周四接到一个task,关于checklist.因为组里没有人用过,所以遇到一些问题,本来不应该是一个复杂的工作,但是我需要一个一个 ...
- linux删除ORACLE【weber出品必属精品】
关闭数据库 sqlplus / as sysdba shutdown abort 清除oracle软件 su - oracle cd $ORACLE_BASE rm -rf * rm -rf /etc ...