# 7. 编写程序,测试 1~50 的阶乘所消耗的毫米级时间

# 1. 计算阶乘:用 while 循环即可

a
while(i<n){ //n 即为想要算阶乘的数
s*=i            //s 为阶乘计算的结果
i=i+1;
}

# 2. 计算毫时间差

需要头文件

import java.util.Date;

1. 计算毫米级时间

用时间戳:System.currentTimemillis (); 这是一个长整型数

a
long startMillis = System.currentTimeMillis();
// 中间为所执行代码
long endMillis = System.currentTimeMillis();
System.out.println(endMillis - startMillis); // 输出时间差

2. 计算纳米级时间

用时间戳:System.nanoTime (); 使用方法与上面相同,做替换即可

a
long startnano = System.nanoTime();
// 中间为所执行代码
long endnano = System.nanoTime();
System.out.println(endnano - startnano); // 输出时间差

参考:http://t.csdn.cn/g7ifM

# 3. 计算大数的阶乘

由于计算的阶乘结果数据很大,long 型无法保存,所以需要用 BigInteger 型

需要头文件

import java.math.BigInteger;

用 BigInteger 来定义时:

BigInteger s = new BigInteger("1"); 给 s 赋值为 1

将 int 类型转化成 BigInteger, 可以用如下方式:

a
long i =1;
BigInteger t=Biginteger.valueOf(i) // 用 t 来记录大数型的 i 值

http://t.csdn.cn/Z8VEU

# 代码实现:

因为用豪秒级时间差为 0,所以改用纳秒级

a
import java.math.BigInteger;
import java.util.Date;
public class Main {
    public static void main(String[] args) {
        long i = 1;
        long n = 1;
        for (n = 1; n <= 50; n++) {        // 从 1(n=1)的阶乘开始
            BigInteger s = new BigInteger("1"); // 每次循环重置成 1
            long startMillis = System.currentTimeMillis();
            long start =System.nanoTime();           // 用纳秒级记录,因为更精准所以放里面防止被干扰
            while (i <= n) {                         // 计算每个的阶乘
                BigInteger t=BigInteger.valueOf(i);// 用 t 来记录转成大数型的 i
                s=s.multiply(t);// 不能直接是 s.multiply ()
                i=i+1;
            }
            System.out.println(n+" 的阶乘为: "+s);
            long end = System.nanoTime(); // 纳秒记录结尾时间戳
            long endMillis = System.currentTimeMillis();
            System.out.println(n + " 的阶乘所消耗的 豪秒 级时间为 " + (endMillis - startMillis));
            System.out.println(n + " 的阶乘所消耗的 纳秒 级时间为 " + (end - start));
            i = 1;    // 重置
        }
    }
}