2014-01-31 96 views
2

我想使用for循环在java中执行因子程序。例如,我想要接受用户输入,例如10,然后乘以10*9*8*7*6*5*4*3*2*1。我需要帮助构建for循环。下面的代码是我所有的,因为我不知道该去哪里。因子Java程序

import java.util.Scanner; 
import java.lang.Math; 
public class factorial { 

    public static void main(String[] args) { 
     int num; 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a number: "); 
     num = input.nextInt(); 
    } 
} 
+1

你试试.. ??? – Kick

+0

现在您的程序中有用户输入的数字,您需要计算“以某种方式”来计算阶乘。 – Fabinout

+1

推荐阅读:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html –

回答

3

尝试

public static void main(String[] args) { 
    int num; 
    int fact=1; 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    num = input.nextInt(); 
    for (int i=2;i<=num; i++){ 
     fact=fact*i; 
    } 

    System.out.println("Factorial: "+fact); 
} 

如@Marko Topolnik在注释中提到的这个代码将用于输入工作到12对于较大的输入将输出无穷由于溢出。

对于比12,你应该使用像BigInteger

更高的数据类型更大的数字你可以试试:

public static void main(String[] args) { 
    BigInteger num; 
    BigInteger fact = BigInteger.valueOf(1); 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    num = input.nextBigInteger(); 
    for (int i = 2; i <= num; i++){ 
     fact = fact.multiply(BigInteger.valueOf(i)); 
    } 
    System.out.println(fact); 
} 
+7

接下来你会做我的作业吗? –

+1

像这样的家庭作业的重点不是要让学生记住句法,而是要通过将问题分解成更小的片断和逐个接近每个片断的过程来工作。通过发布一个完整的代码解决方案,您已经抢走了该进程的OP,从长远来看,这将会伤害他/她。 OP下一次解决问题时会发生什么?在测试过程中会发生什么?推荐阅读:http://meta.stackexchange.com/questions/10811/how-do-i-ask-and-answer-homework-questions –

+0

请注意,您的代码仅适用于最多输入12个输入。绑定检查可能是个好主意...... –

0
int sum = 1; 

for (int i = 2;i <= num;i++) { 
    sum = sum * i; 
} 
2

何必计算呢?

public int factorial (int n) { 
switch(n){ 
case 0: return 1; 
case 1: return 1; 
case 2: return 2; 
case 3: return 6; 
case 4: return 24; 
case 5: return 120; 
case 6: return 720; 
case 7: return 5040; 
case 8: return 40320; 
case 9: return 362880; 
case 10: return 3628800; 
case 11: return 39916800; 
case 12: return 479001600; 
default : throw new IllegalArgumentException(); 
} 

来源:@Emory

+0

不错:)欺骗系统的方式xD – Eqorip

+0

准确地说---查找表就是你真正需要的。而对于“长”结果,级联的大小将会增加一倍。 –

+0

我想你只是自己计算了12次..这就是为什么我们要编码,以防止做乏味的事情:D(或者你是否编写代码来计算它?) – RobAu

0

试试这个程序:=

import java.util.*; 
public class Factorials { 
public static void main(String[] args){ 
    Scanner sc=new Scanner(System.in); 
    int i,num,a,b; 
    int c=1; 
    System.out.println("Enter the no.= "); 
    num=sc.nextInt(); 
    for(i=1;i<=num;i++){ 
    c=i*c; 
    } 
    System.out.println("Factorial is "+c); 
} 
} 
1

这是我的计划

class FactorialUsingFor 
{ 
    public static void main(String arg[]) 
    { 
     int factorial = 1; 
     int number = 6; 

     for(int i = 1; i <= number; i++) 
     { 
      factorial *= i; 
     } 

     System.out.println("Factorial of number " + number + " is " + factorial); 

    } 
} 
4

编码由递归函数:

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) 
    { 
     System.out.print("Enter a number: "); 
     Scanner input = new Scanner(System.in); 
     int num = input.nextInt(); 
     long factorialResult = factorialRecursive(num); 
     System.out.println(factorialResult); 
    } 


    public static long factorialRecursive(int n) { 
     if (n == 0 || n == 1) 
      return 1; 

     return n * factorialRecursive(n - 1); 
    } 
} 

来源:learn.uncox.com

如果数目很大,将发生“stackoverflow”。

+1

0的阶乘是1.你的代码没有考虑到那。基本情况应该是'n == 0' – Ungeheuer

+0

谢谢,编辑了上面的代码 – gadolf