在书上看到这个提的几种解法 , 前面的一种很简单 , 随着越来越考虑效率问题 , 那么难点就出来了, 希望读者和我一样能有所获。
long fn(int num)
{
if (num <= 0)
assert(false);
int n = 0;
int flag = 1;
int i = 1;
while (i <= num)
{
n += flag*i++;
flag = flag*(-1);
}
return n;
}
<span style="background-color: rgb(0, 153, 0);"> </span>
long fn1(int num)
{
if (num <= 0)
assert(false);
int n = 0;
int flag = 1;
int i = 1 , j = 1;
while (j <= num)
{
n += i;
i= -i;
i > 0 ? i++ : i--;
j++;
}
return n;
}
<span style="background-color: rgb(0, 153, 0);"> </span>
long fn2(int num)
{
if (num <= 0)
assert(false);
if (num % 2 == 0)
return (-1)*num / 2;
return (-1)*num / 2 + num;
}