累加求和算法

okgoes 2023-05-09 13:07:15
Categories: Tags:

例子:求1累加100。

普通算法

1
2
3
4
int sun = 0;
for (int i = 1; i<100 i++){
    sum = sum + i;
}

优化后的算法

1
int sum =(1 + 99) * 50 + 50;

如果1累加到99.

1
2
3
4
int sun = 0;
for (int i = 1; i<99 i++){
    sum = sum + i;
}

优化后的算法

1
int sum =(1 + 98) * 50;

优化算法与通用算法对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>


void change(int *num1, int *num2){
*num1 = *num2 + *num1;
*num2 = *num1 - *num2;
*num1 = *num1 - *num2;
}

int add(int min, int max){
if (min > max) {
change(&min, &max);

int sum = 0;
int addTimes = 0;
if ((min + max) % 2 == 0) {
addTimes = (max - min) / 2
return addTimes * (max + min ) + (max + min ) /2;
else {
addTimes = (max - min + 1) / 2
return (max+min)*addTimes;
}
}

int commAdd(int min, int max){
if (min > max) {
change(&min, &max);
}
int sum = 0;
for (int i = min; i <= max; i++) {
sum+=i;
}
return sum;
}

void main() {
int min = -1,max = -100;
printf("add = %d\n", add(min, max));
printf("addcomm = %d\n", commAdd(min, max));
}

结果如下:

1
2
3
add = -5050
addcomm = -5050
Press any key to continue