循环
方法一
定义一个表示正负的变量,循环的时候改变状态
static int SumMath(int m)
{
if (m <= 1)
{
return m;
}
int sum = 0;//储存计算结果
int flag = 1;//符号状态
for (int i = 1; i <= m; i ++)
{
sum = sum + i * flag ;
flag = -flag ;
}
return sum;
}
方法二
判断当前变量能够被2整除
static int SumMath(int m)
{
if (m <= 1)
{
return m;
}
int sum = 0;//储存计算结果
for (int i = 1; i <= m; i++)
{
//i不能被2整除此时sum+i
if (i % 2 != 0)
{
sum += i;
}
else
{
sum -= i;
}
}
return sum;
}
递归
方法一
根据-1的n次方计算当前值的正负,统计和
static int SumMath(int m)
{
if (m <= 1)
{
return m;
}
return (int)Math.Pow(-1, m - 1) * m + SumMath(m - 1);
}
方法二
按位与计算当前值的正负,统计和
static int SumMath(int m)
{
if (m <= 1)
{
return m;
}
return SumMath(m - 1) + m * ((m & 1) * 2 - 1);
}
方法三
将计算次数、状态、和总和当做参数传进方法
static int SumMath(int m, int cursor = 1, int flag = 1, int sum = 0)
{
if (current > m)
{
return sum;
}
return SumMath(m, cursor + 1, -flag, sum + cursor * flag);
}
其他
方法一
(1-2) + (3-4) + (5-6)……
private int SumMath(int m)
{
if (m <= 1)
{
return m;
}
if (m % 2 == 0)
{
//当m除以2求余为0时 总和为 m/2个-1相加
return -m / 2;
}
else
{
//总和为m 减去 (m-1)/2个-1
return (m+1)/2;
}
}