C语言编写程序对于给定的正整数n,求1+2+…+n,采用逐个累加与n(n+1)/2(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。
时间: 2024-09-12 13:07:26 浏览: 63
计算 S=1!+2!+3!+...+N! C语言代码
在C语言中,计算1到n的累加和可以采用两种方法:逐个累加和高斯法。
1. 逐个累加法:这是一种非常直观的方法,通过一个循环从1累加到n,代码实现简单。但这种方法的时间复杂度较高,为O(n),当n较大时,所需时间会显著增长。
2. 高斯法:高斯法基于等差数列求和的公式,即1到n的和等于n(n+1)/2。这种方法直接通过一个公式计算得到结果,时间复杂度为O(1),因此比逐个累加法快得多,特别是对于较大的n值。
下面是两种方法的C语言实现:
逐个累加法:
```c
#include <stdio.h>
#include <time.h>
long long sum_by_addition(int n) {
long long sum = 0;
clock_t start_time = clock();
for(int i = 1; i <= n; i++) {
sum += i;
}
clock_t end_time = clock();
printf("逐个累加法计算时间:%f 秒\n", (double)(end_time - start_time) / CLOCKS_PER_SEC);
return sum;
}
int main() {
int n = 100000; // 示例数值,可以根据需要调整
long long sum = sum_by_addition(n);
printf("逐个累加法结果:%lld\n", sum);
long long sum_by_gauss = n * (n + 1) / 2;
printf("高斯法结果:%lld\n", sum_by_gauss);
return 0;
}
```
高斯法:
```c
#include <stdio.h>
long long sum_by_gauss(int n) {
long long sum = n * (n + 1) / 2;
return sum;
}
int main() {
int n = 100000; // 示例数值,可以根据需要调整
long long sum = sum_by_gauss(n);
printf("高斯法结果:%lld\n", sum);
return 0;
}
```
为了测试这两种方法,你需要编译和运行上述代码,并观察它们的执行时间。注意,逐个累加法可能需要较长的时间来计算大数值的和,而高斯法则几乎瞬间完成。
阅读全文