关于java中的数值计算
记得在csdn的某个帖子中提到计算阶乘的讨论,当时有很多人都提出了自己的算法,每个人都想的很周全。
这两天正好自己看到了相关的文章,那么总结整理一下,以供大家参考,也为了自己的知识总结。
在数学中,只有非负整数才有阶乘运算,意思就是说浮点数、负整数都不能进行计算,那么我们在考虑计算时,小于0的数字我们是不考虑计算的。在计算机中,整数的最大取值范围为long型,那么计算阶乘总有会超过计算机数值类型的有效范围。
如果我们考虑使用long作为返回类型,那么这是有范围的阶乘运算,代码可以如下:
//我的操作系统是32位的XP,可以计算20以内的阶乘
//阶乘计算的数值必须大于等于0,如果小于0不计算
//0的阶乘计算值为1
if ( n < 0 || n > 20 ) { //进行范围检查
return -1;
} else if ( n == 0 ) {
return 1;
} else {
long result = 1;
for ( ; n > 0 ; n -- ) {
result *= n;
}
return result;
}
那么如果计算大的数值阶乘时,怎么算呢?
java中提供了相应的处理办法,采用BigInteger来计算,代码如下
if ( n < 0 ) {
return new BigInteger("-1");
} else if ( n == 0 ) {
return new BigInteger("1");
} else {
BigInteger result = new BigInteger("1");
for ( ; n > 0 ; n -- ) {
result = result.multiply(new BigInteger(new Integer(n).toString());
}
return result;
}
相关文档:
新安装了 JDK 6 的程序员们也许会发现,除了传统的 bin、jre 等目录,JDK 6 新增了一个名为 db 的目录。这便是 Java 6 的新成员:Java DB。这是一个纯 Java 实现、开源的数据库管理系统(DBMS),源于 Apache 软件基金会(ASF)名下的项目 Derby。它只有 2MB 大小,对比动辄上 G 的数据库来说可谓袖珍。但这并不妨碍 Derby ......
首先java接口和抽象类代表的就是抽象类型,就是我们需要提出抽象层的具体实现,如果要提高程序的复用率,可维护性,可扩展性,就必须面向接口和抽象编程,正确使用他们。 (1)抽象类可以提供实现方法,接口不能
这是抽象类的唯一优点,而且非常有用,例如,你定义一个接口,子类不需要他的所有方法,可是你没办法不去 ......
总是忘记java读写文件的代码具体怎么写,写了一个记录如下
String filename="mydict.txt";
File file=new File(filename);
//read file
if(file.exists())
{
try
{
BufferedReader br=new BufferedReader(new FileReader(file));
String temp=null;
while((temp=br.readLine())!=null) ......
简而言之,这两个类是用来利用正则表达式验证字符串有效性的。
Pattern类用来定义正则表达式规则,Matcher类用来定义要验证的字符串。
用法:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
当然,也可以直接用Pattern类直接验证,用法:
boolean ......