累加求和算法

person smartzeng    watch_later 2017-06-05 21:01:36
visibility 2152    class 数据结构,求和,优化算法    bookmark 分享

例子:求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


评论区
评论列表
menu