1-2+3-4+5...+n各种解法

在书上看到这个提的几种解法 , 前面的一种很简单 , 随着越来越考虑效率问题 , 那么难点就出来了, 希望读者和我一样能有所获。

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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值