A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓璐 黑马帝   /  2011-7-31 19:45  /  2335 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

class factorialTest{
static int factorial(int arg){
if(arg==0){ return 1; }else{ return arg*factorial(arg-1); }
}
public static void main(String[] args){
System.out.println(factorial(0));
System.out.println(factorial(1));
System.out.println(factorial(2));
System.out.println(factorial(20));
System.out.println(factorial(50));
}
}
答案是:1
             1
             2
            -2102132736
              0
为什么factorial(20)是负数?为什么factorial(50)是0?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 新手报到!

查看全部评分

3 个回复

正序浏览
黑马网友  发表于 2011-8-1 18:34:42
板凳
这是一个计算阶乘的程序,20!数字太大,越界了,int类型表示不了这么大的数字。
回复 使用道具 举报
黑马网友  发表于 2011-8-1 12:59:15
藤椅
我觉得那个参数类型改成long更合适

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 答题有分,继续努力。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-31 19:50:09
沙发
是越界了,你那个数儿太大了,像下面这样就可以了
public class factorialTest{
static double factorial(int arg){
if(arg==0){
  return 1;
  }
else{
  return arg*factorial(arg-1);
  }
}
public static void main(String[] args){
System.out.println(factorial(0));
System.out.println(factorial(1));
System.out.println(factorial(2));
System.out.println(factorial(20));
System.out.println(factorial(50));
}
}
运行结果:
1.0
1.0
2.0
2.43290200817664E18
3.0414093201713376E64

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马