今天在地大邀请赛中,A题是大数题,java大数类不会用,c++大数模板写的不熟练,就懒得写,结果,只得了三等奖。。。
今天恶补下:
import java.math.BigDecimal; import java.util.Scanner; import java.math.BigInteger; public class Math { /** * @param args */ private static final int DEFAULT_DIV_SCALE = 10; public static void main(String[] args) { // TODO Auto-generated method stub /*while(true) { Scanner input = new Scanner(System.in); int num = input.nextInt(); System.out.println(num); }*/ //BigInteger x = new BigInteger(44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444111"); // BigInteger y = new BigInteger ("-555555555555555555555555555555555555555555"); int m = 1233; BigInteger x = new BigInteger("12422333332222222222223443211"); BigInteger y = new BigInteger ("12"); BigInteger k = new BigInteger("e",16); System.out.println(k); System.out.println(x.add(y)); System.out.println(y.abs()); System.out.println(y.compareTo(x)); BigInteger n = x.divide(y.abs()); System.out.println(n); System.out.println(n.multiply(y.abs())); System.out.println(y.gcd(x)); System.out.println(x.gcd(y)); System.out.println(x.subtract(y)); System.out.println(x.pow(m)); /*System.out.print("输入数据:\n"); System.out.println("输入数据:"); Scanner input = new Scanner(System.in); float num = input.nextFloat(); System.out.println(num);*/ System.out.println("大数求余:"); System.out.println(x.mod(y)); BigDecimal a = new BigDecimal("11111111.213211"); System.out.println("a="+a); /*BigInteger b = new BigInteger ("11111111.213211");*/ BigInteger b = new BigInteger ("11111111"); System.out.println("b="+b); BigDecimal c = new BigDecimal("12222.121"); System.out.println("c=="+c); System.out.println("a+c="+a.add(c)); } }
题目链接:http://poj.org/problem?id=1001
第一次写java代码,交了一次没过,桑心。。。要做Codeforces了,有空补上
poj100题,留图纪念、、、、、、、、、、、、
记得,poj提交java类名都要换成Main的啊
import java.math.BigInteger; import java.math.BigDecimal; import java.util.Scanner; import java.io.*; //不知道这些包导入的对不? public class Exponentiation { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); /*读入: * 用Scanner 类定义的对象进行控制台读入,Scanner类在java.util.*包中 * Scanner input = new Scanner(System.in); * int n = input.nextInt(); * BigInteger nn = input.nextBigInteger(); * ...................................... */ while (input.hasNext()) //等同于!= EOF { int n; BigDecimal a = input.nextBigDecimal(); //读入一个BigDecimal n = input.nextInt(); a = a.pow(n); // 返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。 //pow(int n, MathContext mc) 返回其值为 (thisn) 的 BigDecimal。 a = a.stripTrailingZeros(); /*public BigDecimal stripTrailingZeros (strip 脱去剥夺,trailing(拖尾,后面的)) * 返回数值上等于此小数,但表示形式溢出所有尾部0的BigDecimal * 1.22222300000 用过之后为1.222223 类型还是BigDeciaml类型 */ String str = a.toPlainString(); /* * 注意toPlainString()和toString()的区别 * 对于:BigDecimal s; s = (0.4321^20) * String str = s.toPlainString(); * System.out.println(str); * 输出:0.0000000514855464107。。。。。01 * *若String str = s.toString(); *输出为: 5.14855464107。。。。01E-8 */ if (str.startsWith("0.")) //以什么开始 { str = str.substring(1); /*substring是java中截取字符串的一个方法 * 有两种传参方式 * 一种是:public String substring(int deginindex) * 返回一个新的字符串,它是此字符串的一个子串,该字串从指定索引处的字符开始直到字符串末尾 * 另一种是public String substring(int deginindex,int endindex) * 返回一个新字符串,也是它的一个子串。该字串从beginindex处开始 * 直到索引到endindex-1处的字符。因此该字符串的长度为endindex-beginindex * * * substr * 该方法用于返回一个从指定位置开始的指定长度的子字符串 *substr(start,length); */ } System.out.println(str); } } }
java提交果然慢,100多ms
很好很好的资源:http://man.ddvip.com/program/java_api_zh/java/math/BigDecimal.html#stripTrailingZeros()
http://www.chineselinuxuniversity.net/articles/50293.shtml
http://wenku.baidu.com/view/9463cec7aa00b52acfc7caa8.html
坚持啊啊啊