java中的BigInteger 拼搏现实的明天。 2021-11-06 02:08 246阅读 0赞 今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换。都会变成0. 参考书籍发现使用使用BigInteger可以解决这个问题。 于是查找了下JDK,然后测试几次终于写成功了! 使用心得如下: 1,BigInteger属于java.math.BigInteger,因此在每次使用前都要import 这个类。偶开始就忘记import了,于是总提示找不到提示符。 2,其构造方法有很多,但现在偶用到的有: <table style="font-family:Verdana,Geneva,Arial,Helvetica,sans-serif"> <tbody> <tr> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a></strong>(<a title="java.lang 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">String</a> val)</code><br> 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。</td> </tr> <tr> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a></strong>(<a title="java.lang 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">String</a> val, int radix)</code><br> 将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。</td> </tr> </tbody> </table> 如要将int型的2转换为BigInteger型,要写为BigInteger two=new BigInteger("2"); // 注意2双引号不能省略 3,BigInteger类模拟了所有的int型数学操作,如add()==“+”,divide()==“-”等,但注意其内容进行数学运算时不能直接使用数学运算符进行运算,必须使用其内部方法。而且其操作数也必须为BigInteger型。 如:two.add(2)就是一种错误的操作,因为2没有变为BigInteger型。 4,当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串,详细说明如下: <table> <tbody> <tr> <td align="right"><span style=""><code> <a title="java.lang 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">String</a></code></span></td> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">toString</a></strong>()</code><br> 返回此 BigInteger 的十进制字符串表示形式。</td> </tr> </tbody> </table> 输出方法:System.out.print(two.toString()); 5,另外说明三个个用到的函数。 <table> <tbody> <tr> <td align="right"><span style=""><code> <a title="java.math 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a></code></span></td> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">remainder</a></strong>(<a title="java.math 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a> val)</code><br> 返回其值为 (this % val) 的 BigInteger。</td> </tr> </tbody> </table> <table> <tbody> <tr> <td align="right"><span style=""><code> <a title="java.math 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a></code></span></td> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">negate</a></strong>()</code><br> 返回其值是 (-this) 的 BigInteger。</td> </tr> </tbody> </table> <table> <tbody> <tr> <td align="right"><span style=""><code> int </code></span></td> <td><code><strong><a style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">compareTo</a></strong>(<a title="java.math 中的类" style="color:rgb(29,88,209); text-decoration:none" rel="nofollow">BigInteger</a> val)</code><br> 将此 BigInteger 与指定的 BigInteger 进行比较。</td> </tr> </tbody> </table> remainder用来求余数。 negate将操作数变为相反数。 compare的详解如下: ### compareTo ### public int compareTo(BigInteger val) 将此 BigInteger 与指定的 BigInteger 进行比较。对于针对六个布尔比较运算符 (<, ==, >, >=, !=, <=) 中的每一个运算符的各个方法,优先提供此方法。执行这些比较的建议语句是:(x.compareTo(y) <*op*> 0),其中 <*op*> 是六个比较运算符之一。 **指定者:** 接口 `Comparable<BigInteger>` 中的 `compareTo` **参数:** `val` - 将此 BigInteger 与之比较的 BigInteger。 **返回:** 当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。
还没有评论,来说两句吧...