锁定老帖子 主题:看看这道题,有点弱大家谅解
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-21
flootball 写道 早上看错了,现在补上。
Math.pow(-1, (n+1))*n+(n>>1)*Math.pow(-1, n) 这么简洁高效无人理解。! |
|
返回顶楼 | |
发表时间:2010-01-21
(((n&1)<<1)*(n+1)) - n>>1
|
|
返回顶楼 | |
发表时间:2010-01-21
if (n%2==0)
return -n/2; else return n/2+1; |
|
返回顶楼 | |
发表时间:2010-01-21
其实这个用数学归纳法归纳一下就可以出来了。
如果n为奇数,结果为 (n+1)/-2 如果n为偶数,结果为 n/2 |
|
返回顶楼 | |
发表时间:2010-01-21
强强爱妍妍 写道 1-2+3-4+5-6....
当n为奇数,和为n/2 +1/2 当n为偶数,和为(-1) * n/2 若n类型为32位有符号整型, 则伪代码 if ( n & 0x1 == 0) //偶数 { sum = n 右移 1位; sum = sum取反; //取反得负数 } else //奇数 { sum = n 右移 1位; sum ++; //不可以先++,有溢出可能 } n很大是多大? 若n超出32位整型,需要用到大数,则需要找一个大数的实现来做,这里不再探讨了. 论正确性,论效率,都是我的最好哎 答题的各位,拿边界值测一下再发伪代码好不 |
|
返回顶楼 | |
发表时间:2010-01-21
强强爱妍妍 写道 强强爱妍妍 写道 1-2+3-4+5-6....
当n为奇数,和为n/2 +1/2 当n为偶数,和为(-1) * n/2 若n类型为32位有符号整型, 则伪代码 if ( n & 0x1 == 0) //偶数 { sum = n 右移 1位; sum = sum取反; //取反得负数 } else //奇数 { sum = n 右移 1位; sum ++; //不可以先++,有溢出可能 } n很大是多大? 若n超出32位整型,需要用到大数,则需要找一个大数的实现来做,这里不再探讨了. 论正确性,论效率,都是我的最好哎 答题的各位,拿边界值测一下再发伪代码好不 最简单的解决办法: ((n ^ (-1 + (n & 1))) >> 1) + 1 |
|
返回顶楼 | |
发表时间:2010-01-21
wb17534806 写道 prowl 写道 return n==1?n:n-((n-1)>>1); 另外我问一句,n可能是偶数吗。。。各位 - -|| 还是你注意了。。。细心是编码不可或缺的要素! 为什么不可能是偶数呢 |
|
返回顶楼 | |
发表时间:2010-01-21
schweigen 写道 最简单的解决办法: ((n ^ (-1 + (n & 1))) >> 1) + 1 兄弟的算法跟我的各有千秋啊. 你的多一步计算,但没有分支. |
|
返回顶楼 | |
发表时间:2010-01-21
bcccs 写道 jordan421 写道 哎。。。看了这么多回帖挺无语的
都劝你别干这行了。 请你滚开。滚得越远越好,我就喜欢干这行碍你什么事? |
|
返回顶楼 | |
发表时间:2010-01-21
jordan421 写道 bcccs 写道 jordan421 写道 哎。。。看了这么多回帖挺无语的
都劝你别干这行了。 请你滚开。滚得越远越好,我就喜欢干这行碍你什么事? 我就喜欢劝你,又碍你什么事? |
|
返回顶楼 | |