例子:求1累加100。
普通算法
int sun = 0;
for (int i = 1; i<100 i++){
sum = sum + i;
}
优化后的算法
int sum =(1 + 99) * 50 + 50;
如果1累加到99.
int sun = 0;
for (int i = 1; i<99 i++){
sum = sum + i;
}
优化后的算法
int sum =(1 + 98) * 50;
优化算法与通用算法对比
#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));
}
结果如下:
add = -5050
addcomm = -5050
Press any key to continue