黑马程序员技术交流社区
标题:
计算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)......
public class Demo {
public static void main(String[] args){
System.out.println(calculation(3, 5));//3代表n的值,5代表n-1累加的最高位
}
public static int calculation(int num1, int num2){
int n = 0;
for(int x = 0; x <= num2; x++){
n *= num1*(num1 - x);//这里没有累乘,我传什么结果都是0
}
return n;
}
}
复制代码
作者:
通行天下
时间:
2013-4-12 15:34
本帖最后由 通行天下 于 2013-4-12 15:37 编辑
class ChengTest
{
public static void main(String[] args)
{
//输入2个正整数,并通过调用方法打印出结果。
System.out.println("结果为"+leiCheng(3,5));
}
//此方法的功能是计算n*(n-1)*....*(n-p)的,并返回计算结果。
public static int leiCheng(int n,int p)
{
//注意,只有当n>p时,结果才不为零!!!
if(n > p)
{
int m = 1;
for(int i=0;i<=p;i++)
{
m *=(n-i);
}
return m;
}
else
return 0;
}
}
这样写就对啦,但必须要使n大于p才能使结果不为零啊!!希望对你有用。
复制代码
作者:
陈圳
时间:
2013-4-12 15:34
本帖最后由 陈圳 于 2013-4-12 15:37 编辑
/**计算n = n*(n-1)*(n-2)*(n-3)......
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getNumltipli2(4,2));
System.out.println(getMultipli1(4,2));
}
public static int getMultipli1(int num,int n){//递归
if(n==0)
return num;
return num*=getMultipli1(num-1,n-1);
}
public static int getNumltipli2(int num,int n){//for循环
int sum=1;//你的错误在这里!必须改为1,如果是0.怎么除结果肯定都是0;
int length=n;
for(int i=0;i<=length;i++){
sum*=num--;
}
return sum;
}
复制代码
作者:
飞天小猪猪
时间:
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