# 7. 编写程序,测试 1~50 的阶乘所消耗的毫米级时间
# 1. 计算阶乘:用 while 循环即可
while(i<n){ //n 即为想要算阶乘的数 | |
s*=i //s 为阶乘计算的结果 | |
i=i+1; | |
} |
# 2. 计算毫时间差
需要头文件
import java.util.Date;
1. 计算毫米级时间
用时间戳:System.currentTimemillis (); 这是一个长整型数
long startMillis = System.currentTimeMillis(); | |
// 中间为所执行代码 | |
long endMillis = System.currentTimeMillis(); | |
System.out.println(endMillis - startMillis); // 输出时间差 |
2. 计算纳米级时间
用时间戳:System.nanoTime (); 使用方法与上面相同,做替换即可
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, 可以用如下方式:
long i =1; | |
BigInteger t=Biginteger.valueOf(i) // 用 t 来记录大数型的 i 值 |
http://t.csdn.cn/Z8VEU
# 代码实现:
因为用豪秒级时间差为 0,所以改用纳秒级
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; // 重置 | |
} | |
} | |
} |