这里的demo是一个累加算法,如1,2,3,4.....n
即:sum = 1+2+3+4......+n;
我们可以这样做:
1 /**
2 * 循环实现累加方法
3 * @param value
4 * @return
5 */
6 private static long cycle(long value) {
7 long sum = 0;
8
9 for (long i = 1,v = value; i <= v; i++) {
10 sum += i;
11 }
12 return sum;
13 }
另一种方法(高斯方法):
1 /**
2 * 高斯方法:<code>(n+1)*n/2</code><br>
3 * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
4 * @param value
5 * @return
6 */
7 private static long gaosi(long value) {
8 long sum = 0;
9 sum = (value + 1) * value / 2;
10 return sum;
11 }
我们可以写一个demo来测试他们的差别:
1 /**
2 *
3 */
4 package com.b510.arithmetic;
5
6 /**
7 * 累加算法实现<br>
8 *
9 * @date 2013-4-16
10 * @author hongten
11 *
12 */
13 public class AddArithmetic {
14
15 /**
16 * 循环实现累加方法
17 * @param value
18 * @return
19 */
20 private static long cycle(long value) {
21 long sum = 0;
22
23 for (long i = 1,v = value; i <= v; i++) {
24 sum += i;
25 }
26 return sum;
27 }
28
29 /**
30 * 高斯方法:<code>(n+1)*n/2</code><br>
31 * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
32 * @param value
33 * @return
34 */
35 private static long gaosi(long value) {
36 long sum = 0;
37 sum = (value + 1) * value / 2;
38 return sum;
39 }
40
41 public static void main(String[] args) {
42 //清理一下内存,但不一定会执行
43 System.gc();
44 // you should change value,then get the different results
45 long value = 10000000;
46 long sum = 0;
47 long start = System.currentTimeMillis();
48 sum = cycle(value);
49 long end = System.currentTimeMillis();
50 System.out.println("使用循环累加方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
51 //清理一下内存,但不一定会执行
52 System.gc();
53 start = System.currentTimeMillis();
54 sum = gaosi(value);
55 end = System.currentTimeMillis();
56 System.out.println("使用高斯方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
57
58 }
59
60 }
你可以改变main方法中的value的值,来测试他们所消耗的系统时间....
当然不同配置的机器运行结果是不一样的...
我机器运行情况:
使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000