用c语言编写一个程序,对于给定的正整数n,求1+2+3...+n,采用逐个累加以及利用n(n+1)/2高斯法(或者叫等差数列求和公式法)两种方法求解,对于给出相同的n,两种不同方法的求和结果和求解的时间,并利用相同数据进行测试验证
时间: 2024-12-11 08:34:43 浏览: 34
计算 S=1!+2!+3!+...+N! C语言代码
在C语言中,我们可以分别使用循环逐个累加和利用等差数列求和公式来计算1到n的和。以下是两种方法的简单示例:
1. **逐个累加** (Using loop):
```c
#include <stdio.h>
long long sum_by_loop(int n) {
long long total = 0;
for(int i = 1; i <= n; ++i) {
total += i;
}
return total;
}
int main() {
int n;
printf("Enter a positive integer: ");
scanf("%d", &n);
long long result_loop = sum_by_loop(n);
printf("Sum by loop: %lld\n", result_loop);
// 其他测试...
}
```
2. **利用公式** (Using formula):
```c
#include <stdio.h>
long long sum_by_formula(int n) {
return (n * (n + 1)) / 2;
}
// 在main函数中同样获取输入并调用该函数
```
关于时间和性能方面,等差数列求和公式通常更快,因为它只需要一次简单的算术运算。当`n`非常大时,逐个累加会需要更多的迭代次数,时间复杂度为O(n),而公式的时间复杂度为O(1)。
你可以编写一个测试程序,对几种大小不同的`n`值运行上述两个函数,比较它们的实际运行时间和输出结果是否一致。例如:
```c
void test_sum(int n, long long expected_result) {
long long result_loop = sum_by_loop(n);
long long result_formula = sum_by_formula(n);
if(result_loop == expected_result && result_formula == expected_result) {
printf("Both methods give the same result: %lld\n", result_formula);
} else {
printf("Results differ! Loop: %lld, Formula: %lld\n", result_loop, result_formula);
}
}
int main() {
// 对于一些典型数值如n=10, 100, 1000等,进行测试
test_sum(10, 55); // 验证1+2+...+10的结果
// 更大的n值...
}
阅读全文