看板 ott
作者 標題 java.math.BigInteger使用心得總結
時間 2012年03月21日 Wed. PM 12:31:49
http://www.blogjava.net/yemoo/archive/2006/12/05/85499.html
今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换。都会变成0.
参考书籍发现使用使用BigInteger可以解决这个问题。
于是查找了下JDK,然后测试几次终于写成功了!
使用心得如下:
1,BigInteger属于java.math.BigInteger,因此在每次使用前都要import 这个类。偶开始就忘记import了,于是总提示找不到提示符。
2,其构造方法有很多,但现在偶用到的有:
参考书籍发现使用使用BigInteger可以解决这个问题。
于是查找了下JDK,然后测试几次终于写成功了!
使用心得如下:
1,BigInteger属于java.math.BigInteger,因此在每次使用前都要import 这个类。偶开始就忘记import了,于是总提示找不到提示符。
2,其构造方法有很多,但现在偶用到的有:
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#BigInteger(java.lang.String)]BigInteger[/url]([url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/lang/String.html]String[/url] val) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。 |
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#BigInteger(java.lang.String, int)]BigInteger[/url]([url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/lang/String.html]String[/url] val, int radix) 将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。 |
3,BigInteger类模拟了所有的int型数学操作,如add()==“+”,divide()==“-”等,但注意其内容进行数学运算时不能直接使用数学运算符进行运算,必须使用其内部方法。而且其操作数也必须为BigInteger型。
如:two.add(2)就是一种错误的操作,因为2没有变为BigInteger型。
4,当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串,详细说明如下:
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/lang/String.html]String[/url] | [url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#toString()]toString[/url]() 返回此 BigInteger 的十进制字符串表示形式。 |
5,另外说明三个个用到的函数。
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url] | [url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#remainder(java.math.BigInteger)]remainder[/url]([url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url] val) 返回其值为 (this % val) 的 BigInteger。 |
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url] | [url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#negate()]negate[/url]() 返回其值是 (-this) 的 BigInteger。 |
int | [url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html#compareTo(java.math.BigInteger)]compareTo[/url]([url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url] val) 将此 BigInteger 与指定的 BigInteger 进行比较。 |
negate将操作数变为相反数。
compare的详解如下:
compareTo
public int compareTo([url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url] val)
- 将此 BigInteger 与指定的 BigInteger 进行比较。对于针对六个布尔比较运算符 (<, ==, >, >=, !=, <=) 中的每一个运算符的各个方法,优先提供此方法。执行这些比较的建议语句是:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。
- 指定者:</b>
- 接口
[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html]Comparable[/url]<[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/math/BigInteger.html]BigInteger[/url]>
中的[url=file:///E:/JAVA/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html#compareTo(T)]compareTo[/url]
- 参数:
val
- 将此 BigInteger 与之比较的 BigInteger。- 返回:
- 当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。
-------------------------------------------------------------------
http://blog.johnsonlu.org/?p=1127
在寫程式時,最怕碰到數字超過現有型態的大小,且又要做運算….
Java提供了一個BigInteger物件解除大數的煩腦
import java.math.BigInteger;
public class test
{
public static void main(String [] argv)
{
String a = "1001";
String b = "100";
//建立BigInteger物件
BigInteger big_a = new BigInteger(a);
BigInteger big_b = new BigInteger(b);
//加法使用add()
System.out.println("a + b =" + big_a.add(big_b));
//使用減法是將大數加上負號再產生一個BigInteger物件
System.out.println("a - b =" + big_a.add(new BigInteger("-"+b)));
//乘法使用multiply()
System.out.println("a * b =" + big_a.multiply(big_b));
//除法使用divide()
System.out.println("a / b =" + big_a.divide(big_b));
//取餘數使用mod()
System.out.println("a mod b =" + big_a.mod(big_b));
}
}
--
※ 編輯: ott 時間: 2012-03-21 12:47:11
※ 看板: ott 文章推薦值: 0 目前人氣: 0 累積人氣: 98
回列表(←)
分享