java实现大数加法、乘法(BigDecimal)

之前写过用vector、string实现大数加法,现在用java的BigDecimal类,代码简单很多。但是在online-judge上,java的代码运行时间和内存大得多。

java大数加法:求a+b

import java.util.*;
import java.io.*;
import java.lang.String;
import java.math.BigDecimal;

public class p1036
{
    public static void main(String[] args)
    {
        String s1,s2;
        Scanner cin = new Scanner(System.in);        
        s1 = cin.next();
        s2 = cin.next();
        BigDecimal b1 = new BigDecimal(s1);
        BigDecimal b2 = new BigDecimal(s2);
        System.out.println(b1.add(b2));
        cin.close();
    }
}
        

用这个类,乘除法也很简单,不管是整形还是float,详见http://docs.oracle.com/javase/7/docs/api/ 。

测试输入:

130618656970218663498347545006237201871512019139119220715666434

305161091397192795974451967699240485213039650461566304271331231

421952713061865697021866349834754500623720187151201913911922071

566643430516109139719279597445196769924048521303965046156630427

13312314219527

130618656970218663498347545006237201871512019139119220715666434

305161091397192795974451967699240485213039650461566304271331231

421952713061865697021866349834754500623720187151201913911922071

566643430516109139719279597445196769924048521303965046156630427

13312314219527

输出:

261237313940437326996695090012474403743024038278238441431332868

610322182794385591948903935398480970426079300923132608542662462

843905426123731394043732699669509001247440374302403827823844143

133286861032218279438559194890393539848097042607930092313260854

26624628439054

 

java大数乘法:求2^(n+1)-1

import java.util.*;
import java.io.*;
import java.math.BigDecimal;

//2^(n+1)-1
public class Main
{
    public static void main(String[] args)
    {
        BigDecimal b;
        BigDecimal diff=new BigDecimal(-1);
        int n;
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext())
        {
            n = cin.nextInt();
            b=new BigDecimal(2);
            b=b.pow(n+1);
            System.out.println((b.add(diff)).toString());
        }
    }
}

 

posted @ 2013-10-14 14:00  duanguyuan  阅读(4705)  评论(0编辑  收藏  举报