黑马程序员技术交流社区

标题: 计算n = n*(n-1)*(n-2)*(n-3)...... [打印本页]

作者: 艾萱    时间: 2013-4-12 14:49
标题: 计算n = n*(n-1)*(n-2)*(n-3)......
本帖最后由 艾萱 于 2013-4-12 16:21 编辑

计算n = n*(n-1)*(n-2)*(n-3)......
  1. public class Demo {
  2. public static void main(String[] args){
  3. System.out.println(calculation(3, 5));//3代表n的值,5代表n-1累加的最高位
  4. }

  5. public static int calculation(int num1, int num2){
  6. int n = 0;
  7. for(int x = 0; x <= num2; x++){
  8. n *= num1*(num1 - x);//这里没有累乘,我传什么结果都是0
  9. }
  10. return n;
  11. }
  12. }
复制代码

作者: 通行天下    时间: 2013-4-12 15:34
本帖最后由 通行天下 于 2013-4-12 15:37 编辑
  1. class ChengTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //输入2个正整数,并通过调用方法打印出结果。
  6.                 System.out.println("结果为"+leiCheng(3,5));
  7.         }
  8.         //此方法的功能是计算n*(n-1)*....*(n-p)的,并返回计算结果。
  9.         public static int leiCheng(int n,int p)
  10.         {
  11.                 //注意,只有当n>p时,结果才不为零!!!
  12.                 if(n > p)
  13.                 {
  14.                         int m = 1;
  15.                         for(int i=0;i<=p;i++)
  16.                         {
  17.                                 m *=(n-i);
  18.                         }
  19.                         return m;
  20.                 }
  21.                 else
  22.                         return 0;
  23.                
  24.         }
  25. }

  26. 这样写就对啦,但必须要使n大于p才能使结果不为零啊!!希望对你有用。
复制代码

作者: 陈圳    时间: 2013-4-12 15:34
本帖最后由 陈圳 于 2013-4-12 15:37 编辑
  1. /**计算n = n*(n-1)*(n-2)*(n-3)......
  2.          * @param args
  3.          */
  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 System.out.println(getNumltipli2(4,2));
  7.                 System.out.println(getMultipli1(4,2));
  8.         }
  9.         public static int getMultipli1(int num,int n){//递归
  10.                 if(n==0)
  11.                         return num;
  12.                 return num*=getMultipli1(num-1,n-1);
  13.         }
  14.         public static int getNumltipli2(int num,int n){//for循环
  15.                 int sum=1;//你的错误在这里!必须改为1,如果是0.怎么除结果肯定都是0;
  16.                 int length=n;
  17.                 for(int i=0;i<=length;i++){
  18.                         sum*=num--;
  19.                 }
  20.                 return sum;
  21.         }
复制代码

作者: 飞天小猪猪    时间: 2013-4-12 15:36
本帖最后由 HM朱俊 于 2013-4-12 15:41 编辑

因为你的条件判断里x<=num2,而num1<num2那么当x++到x=num1的时候,循环体里的num1-x 就等于0,那么0乘以任何数都是0,所以你返回的n是0了
作者: 艾萱    时间: 2013-4-12 16:14
通行天下 发表于 2013-4-12 15:34

确实,我发现我的错了,谢谢你啦!
作者: 艾萱    时间: 2013-4-12 16:15
陈圳 发表于 2013-4-12 15:34

嗯,发现了,谢谢
作者: 艾萱    时间: 2013-4-12 16:16
HM朱俊 发表于 2013-4-12 15:36
因为你的条件判断里x

你说的对,我没考虑到,谢谢啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2