最近我发现使用st时的风险:
int i = 10;
int sum = 0;
while ( i-- ){
sum = sum + i;
它实际得到sum = 9 + 8 + 7 + .. + 1.所以它总共缺少10个。但我更喜欢这种编码方式,它快速而专业。有什么建议可以防止风险并且仍然有简洁的代码吗?
答案 0 :(得分:5)
你有一个计数器,一个停止条件和一个减量操作,所以使用一个for
循环 - 它比while
更合适:
int sum = 0;
for (int i = 10; i > 0; --i) {
sum += i;
}
“专业”,简明扼要,无风险:)
修改或者如果你想真的简洁:
int sum = 55;
答案 1 :(得分:3)
至少对于这种特定类型的系列(总和来自1..N),你可以N*(N+1)/2
。 10 * 11/2 = 55。
答案 2 :(得分:1)
后缀增量/减量可能非常讨厌。我建议不要使用它。你的例子甚至不是最糟糕的。它的表现非常好:你实际上得到的是sum = 9 + 8 + 7 + ... + 1 + 0;所以你正在思考这个循环10次。
如评论中所述,使用for循环。
int sum=0;
for (int i=10;i;--i) sum+=i;
前缀运算符更容易混淆,在某些情况下,会使代码更快。
答案 3 :(得分:0)
使用do-while而不是while。
答案 4 :(得分:0)
不知道你的“风险”和“专业”编码方式是什么意思,这段代码是错误的。如果你希望它看起来与你写的“相似”
int i = 10;
int sum = i;
while ( i-- ){
sum = sum + i;
或
int i = 10;
int sum = 0;
do {
sum += i;
} while (--i);