现在的位置: 首页 > 综合 > 正文

poj 1001 java大数类

2013年09月08日 ⁄ 综合 ⁄ 共 4835字 ⁄ 字号 评论关闭

今天在地大邀请赛中,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

坚持啊啊啊

抱歉!评论已关闭.