public class jiecheng
{
int n=0;
long mut=1;
long factorial(int i)
{
for(n=1;n<=i;n++)
{
mut=mut*n;
}
return mut;
}
public static void main(String[] args)
{
jiecheng a=new jiecheng();
int b=0;
for(b=1;b<6;++b)
{
System.out.println(a.factorial(b)) ;
}
}
}
本来想求一个1~5的阶乘,没想到得出一个错误的结果,谁能帮我改一下?
{
int n=0;
long mut=1;
long factorial(int i)
{
for(n=1;n<=i;n++)
{
mut=mut*n;
}
return mut;
}
public static void main(String[] args)
{
jiecheng a=new jiecheng();
int b=0;
for(b=1;b<6;++b)
{
System.out.println(a.factorial(b)) ;
}
}
}
本来想求一个1~5的阶乘,没想到得出一个错误的结果,谁能帮我改一下?
楼主【JAVA_mentu】截止到2008-07-27 12:04:49的历史汇总数据(不包括此帖):
发帖的总数量:12 发帖的总分数:230 每贴平均分数:19
回帖的总数量:39 得分贴总数量:15 回帖的得分率:38%
结贴的总数量:12 结贴的总分数:230
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:8.33 % 无满意结分率:8.70 %
敬礼!
{
long func(int n){
if(n==1)
return 1;
return n*func(n-1);
}
/*
long func(int n){
long num=1;
for(int i=1;i<=n;i++){
num*=i;
}
return num;
}
*/
public static void main(String[] args)
{
jiecheng a=new jiecheng();
for(int i=1;i<6;i++)
{
System.out.println(a.factorial(i)) ;
}
}
}
long factorial(int i) {
int mut=1;
for (int n = 1; n <= i; n++) {
mut = mut * n;
}
return mut;
}把factorial修改一下
mut保存结果的时候,运算之后本次的运行结果保存在mut中。这导致的错误。
//long mut = 1;
long factorial(int i){
int mut = 1;
for(int n=1; n<=i; n++){
mut *= n;
}
return mut;
}
public static void main(String[] args){
Jiecheng a = new Jiecheng(); for(int b=1; b<6; b++){
System.out.println(a.factorial(b)) ;
}
}
}结果是1
2
6
24
120楼上说的没错 你不应该吧mut设置成全局变量,如果这样做的话 就算完1的阶乘,mut=1,而计算完2的阶乘后,mut=2,这并不是我们想要的,我们想要的是mut一直保持它的初始值1,这就要把mut定义在你的阶乘方法你了。
int mut=1;
for (int n = 1; n <= i; n++) {
mut = mut * n;
}
return mut;
}也可以用递归啊: long factorial(int i) {
if(i=0){
return 1;
}else{ return i*factorial(i-1);
}
System.out.println(factorial(5));
} public static int factorial(int num) {
int result = 1;
while(num > 1) {
result *= num--;
}
return result;
}
}
if(n == 1){
return 1;
}else{
return n * factorial(n - 1);
}
}
将 mut=1;放到factorial(int i) 一开始!
int n=0 ; long mut; long factorial(int i) {
mut = 1;
for (n = 1; n <= i; n++) {
mut = mut * n;
}
return mut;
} public static void main(String[] args) {
Jiecheng a = new Jiecheng();
int b = 0;
for ( b = 1; b < 6; b++) {
System.out.println(a.factorial(b));
} }}
将mut改为局部变量就可以了。不改的话也可以,你每次运行fanctorial()方法都建一个新的对象,因为mut为全局变量时,
会保存她的值,像3!就是前面一个mut的值乘以3!(前面一个mut的值就是2!),所以结果是12,而不是6了。