虽然说我不怎么会用java写一些东西,但是java里的biginteger我还是很喜欢的。这个类解决了,我们在其他很多语言中遇到的问题:大数。比如在C++中我们要计算一个大小超过long long的数就必须采取很多的代码来解决。简单一点的课余采取用几个数来存数,复杂的我们就要用到字符串的处理通过,通过字符串我们能够处理任意大的数(理论上,实际由于内存之类的原因还是不行的)。
但是使用字符串的形式实现的方式是十分复杂的。我们就最简单的加法为例说明一下,并展望一下乘法甚至是除法的处理方式。字符串处理大数的本质就是“手工计算”,这里的手工当然不是让你离开电脑去自己算,而是说让电脑按照我们手算的方式进行计算,只是用字符串储存一切结果。比如加法我们使用的方法就是字符串中的每个字符一位一位加,并且自己实现进位功能。下面给一个例子:
如果说加法的复杂程度还可以接受那你还而已考虑一下乘法。。。
好了废话不多说,介绍一下主角:
BIgInteger是java中math包里面的一个类,它可以提供各种各样的大数操作,具体的参考api文档自然是最好的,我这里就只给出一个例子,里面调用的是转换函数,可以简单完成字符串到大数的转换。(个人觉的算是复杂一点的应用了)
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package bigfor2013; 7 import java.math.*; 8 import java.util.*; 9 import java.io.*; 10 /** 11 * 12 * @author lenovo 13 */ 14 public class Bigfor2013 { 15 16 /** 17 * @param args the command line arguments 18 */ 19 public static void main(String[] args) { 20 // TODO code application logic here 21 Scanner cin=new Scanner(new BufferedInputStream(System.in)); 22 BigInteger a,b; 23 a=cin.nextBigInteger(); 24 int from ,to; 25 from =cin.nextInt(); 26 to=cin.nextInt(); 27 String s; 28 s=cin.next(); 29 BigInteger c=new BigInteger(s,from); 30 System.out.println(c.toString(to)); 31 } 32 }