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 ...
随机推荐
- 掌握 Java 8 Lambda 表达式
Lambda 表达式 是 Java8 中最重要的功能之一.使用 Lambda 表达式 可以替代只有一个函数的接口实现,告别匿名内部类,代码看起来更简洁易懂.Lambda 表达式 同时还提升了对 集合 ...
- Hadoop,HBase集群环境搭建的问题集锦(四)
21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...
- windows下绑定线程(进程)到指定的CPU核心
一个程序指定到单独一个CPU上运行会比不指定CPU运行时快.这中间主要有两个原因:1)CPU切换时损耗的性能.2)Intel的自动降频技术和windows的机制冲突:windows有一个功能是平衡负载 ...
- JavaScripts学习日记——BOM
IE 3.0 和 Netscape Navigator 3.0 提供了一种特性 - BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执 ...
- Power Designer - 反向获取数据库物理模型时Unable to list the users 异常
解决方案: 菜单栏 -> Database -> Change Current DBMS ,给DBMS选择Oracle Version 9i2.
- java.sql.SQLException: ORA-00911: 无效字符 解决方案
在使用java执行sql时,抛出的这样一个Oracle异常,最后发现是sql语句末尾有一个分号导致,例如:sql="select * from tl_demo;" .删除" ...
- 附加到IIS调试出现不会命中断点
当项目附加到IIS进行调试时,如果在IIS中没有配置该项目则在设置断点是会出现:当前不会命中断点 还没有为该文档加载任何符号
- Server.HTMLEncode用法
Server.HTMLEncode用法!! Server.HTMLEncode HTMLEncode 一.HTMLEncode 方法对指定的字符串应用 HTML 编码. 语法 Server.HTMLE ...
- tips[Android]
View:2D graphics,SurfaceView:3D graphics. ProgressBar进度渐进动画,可以使用ObjectAnimator实现.动画相关的类: android.vie ...
- 使用NSURLCache为NSURLRequest设置缓存
http://m.blog.csdn.net/blog/u011439689/18734363#