1、首先在电脑打开eclipse软件,创建Scanner对象。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、雅安服务器托管、营销软件、网站建设、泰和网站维护、网站推广。
2、然后输出信息,请求用户输入要输入计算的阶乘数。代码:System.out.println("请输入要计算的阶乘数:");
3、然后创建num接受键盘输入的信息。再创建n,sum。
4、然后创建for语句,进行计算阶乘。
5、然后在最后,输出所算的阶乘结果。代码:System.out.println(n+"的阶乘为"+sum);
6、然后再点击程序运行按钮。在下面的窗口就可以看到运行结果。
1、采用自顶向上的递归方法,代码如下:
import java.util.Scanner;
public class Test {
@SuppressWarnings("resource")
public static void main(String[] args) {
// 从控制台输入一个整数
Scanner in = new Scanner(System.in);
int b = in.nextInt();
// 声明一个Test对象,调用cal方法获得结果
Test test = new Test();
long a = test.cal(b);
System.out.println(a);
}
// 通过递归掉调用最终返回结果
public long cal(int number) {
// 如果数字为1,则直接返回
if (number == 1) {
return 1;
} else {// 否则递归求值
return number * cal(number - 1);
}
}
}
2、递归方法:
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
3、特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by Administrator on 2014/12/18.
*/
public class Test {
private static int fact(int x) {
if (x == 0) {
return 1;
} else {
return x * fact(x - 1);
}
}
public static void main(String[] args) throws IOException {
System.out.println("1.输入名字.");
System.out.println("2.计算阶乘.");
System.out.println("3.退出程序.");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = new Integer(br.readLine()).intValue();
switch (i) {
case 1:
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入你的名字:");
String str = br1.readLine();
System.out.println(str);
break;
case 2:
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个大于等于0的数:");
int result = new Integer(br2.readLine()).intValue();
System.out.println(fact(result));
break;
case 3:
System.exit(0);
}
}
}
不会是gui吧?
使用BigInteger大容量运算类计算100的阶乘
一.一般算法(循环)
view plaincopy to clipboardprint?
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
输出结果为0,因为int无法保存下100的阶乘的结果,100的阶乘的长度至少大于50位,也要大于long,double
二.使用BigInteger大容量运算类
view plaincopy to clipboardprint?
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//为result赋初始值,为1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//调用自乘方法
}
System.out.println(result);//输出结果
System.out.println(String.valueOf(result).length());//输出长度
}
}
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//为result赋初始值,为1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//调用自乘方法
}
System.out.println(result);//输出结果
System.out.println(String.valueOf(result).length());//输出长度
}
}
计算结果为:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
产度:158
public class Foctarial
{
//发现用一个方法调用比较复杂,看起来不容易明白,就使用了2个静态方法调用,一个实现
1*2*3 一个实现1*2+1*2*3
public static int sumadd(int m)
{
if (m==1)
{
return 1;
}
else
{
return m*sumadd(m-1);//递归调用实现1*2*3*4
}
}
public static int sum(int n)
{
if (n==1)
{
return 0;
}
return sumadd(n)+sum(n-1);//递归调用实现1*2+1*2*3
}
public static void main(String[] arge)
{
System.out.print(sum(Integer.valueOf(arge[0])));//输入字符转Int
}
}