我学习c ++,我有这样的练习:
查找此代码中的逻辑缺陷或效率低下。
我发现两个for语句效率低下。 但我觉得存在更多的问题点。 帮我看看他们在哪里。
int Sum(int start, int last) {
int* a = new int[last - start];
int sum = 0;
for (int i = start; i <= last; ++i) {
a[i] = i;
}
for (int i = start; i <= last; ++i) {
sum += a[i];
}
return sum;
}
答案 0 :(得分:0)
此代码存在多个编码问题:
last - start
应该是last - start + 1
)start
索引到last
,包括它,应该将其从0索引到last - start
,包括last
小于start
时,new []
的调用具有未定义的行为(无先决条件检查)。然而,最大的问题是逻辑问题:代码计算start
和last
之间的连续数字的总和,包括在内,这可以用封闭的形式完成,其中包含总和的公式arithmetic progression,根本不使用数组:
int Sum(int start, int last) {
return (last - start + 1)*(last + start) / 2;
}