计算1到n的累加和,并输出计算结果,要求写出两种算法并比较算法时间复杂度。(1)源代码:(注意:n要大到100000000,sum数据类型为double)算法1:算法2:
时间: 2024-09-06 19:05:15 浏览: 86
计算1到n的累加和是一个经典的算法问题,可以采用简单的迭代方式求解,也可以利用高斯求和公式来实现。以下是两种算法的示例代码:
算法1:简单迭代方式
```java
public class SumOneToN {
public static void main(String[] args) {
int n = 100000000; // 假设n为100000000
long startTime = System.nanoTime();
double sum = 0.0;
for (int i = 1; i <= n; i++) {
sum += i;
}
long endTime = System.nanoTime();
System.out.println("迭代法计算结果: " + sum);
System.out.println("迭代法耗时: " + (endTime - startTime) + "纳秒");
}
}
```
算法2:利用高斯求和公式
```java
public class SumOneToN {
public static void main(String[] args) {
int n = 100000000; // 假设n为100000000
long startTime = System.nanoTime();
double sum = (n * (long) (n + 1)) / 2.0;
long endTime = System.nanoTime();
System.out.println("高斯求和法计算结果: " + sum);
System.out.println("高斯求和法耗时: " + (endTime - startTime) + "纳秒");
}
}
```
比较两种算法的时间复杂度:
- 算法1的时间复杂度为O(n),因为需要进行n次加法操作。
- 算法2的时间复杂度为O(1),因为只涉及一次乘法和一次除法操作,与n的大小无关。
对于n非常大时(比如100000000),算法2(高斯求和公式)的性能远远优于算法1(迭代方式),因为它避免了大规模的迭代计算,而是直接通过数学公式得到结果。
阅读全文