论坛首页 招聘求职论坛

看看这道题,有点弱大家谅解

浏览 16642 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-01-21  
flootball 写道
早上看错了,现在补上。

Math.pow(-1, (n+1))*n+(n>>1)*Math.pow(-1, n)



这么简洁高效无人理解。!
0 请登录后投票
   发表时间:2010-01-21  
(((n&1)<<1)*(n+1)) - n>>1
0 请登录后投票
   发表时间:2010-01-21  
if (n%2==0)
  return -n/2;
else
  return n/2+1;

0 请登录后投票
   发表时间:2010-01-21  
其实这个用数学归纳法归纳一下就可以出来了。
如果n为奇数,结果为  (n+1)/-2
如果n为偶数,结果为  n/2
0 请登录后投票
   发表时间: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位整型,需要用到大数,则需要找一个大数的实现来做,这里不再探讨了.


论正确性,论效率,都是我的最好哎
答题的各位,拿边界值测一下再发伪代码好不
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2010-01-21  
wb17534806 写道
prowl 写道
        return n==1?n:n-((n-1)>>1);



另外我问一句,n可能是偶数吗。。。各位 - -||


还是你注意了。。。细心是编码不可或缺的要素!


为什么不可能是偶数呢
0 请登录后投票
   发表时间:2010-01-21  
schweigen 写道

最简单的解决办法:

((n ^ (-1 + (n & 1))) >> 1) + 1


兄弟的算法跟我的各有千秋啊. 你的多一步计算,但没有分支.
0 请登录后投票
   发表时间:2010-01-21  
bcccs 写道
jordan421 写道
哎。。。看了这么多回帖挺无语的

都劝你别干这行了。


请你滚开。滚得越远越好,我就喜欢干这行碍你什么事?
0 请登录后投票
   发表时间:2010-01-21  
jordan421 写道
bcccs 写道
jordan421 写道
哎。。。看了这么多回帖挺无语的

都劝你别干这行了。


请你滚开。滚得越远越好,我就喜欢干这行碍你什么事?

我就喜欢劝你,又碍你什么事?
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics