1-2+3-4+5-6+...+n的java实现?
  我的答案:public static int add(int n){
int b = n/2;
int a = n%2;
if(a==0){
return -b;
}else return -b+n;
}
  可经理说不行,望达人指点!

解决方案 »

  1.   

    public static void add(int n){ 
       int sum=0;
       for(int i=1;i<=n;i++){
         if(i%2==0){
            sum=sum-i
         }else{
            sum=sum+i;
         }
       }
    }
      

  2.   

    if (n%2==0)
    {
    k=-(n/2);
    }
    else
    {
    k=(n+1)/2;
    }
      

  3.   

    public static void add(int n){ 
       int sum=0;
       int num=1;
       for(int i=1;i<=n;i++){
            sum = sum + i * num;
            num = -num;
          }
    }
    这样貌似简单多了
      

  4.   

    public static int add(int n){
    float b = n/2.0;//改为浮点型呢?行不行,应该考虑奇偶吧?
    int a = n%2;
    if(a==0){
    return -b;
    }else return -b+n;
    }
      

  5.   

    请flyineagle(纸上得来终觉浅,绝知此事要躬行)明示!!
      

  6.   

    it seems incorrect! you can test the function with the random number! then i can tell you that the wrong is your idear not other1
      

  7.   

    其实lz的效率应该是最好了,如果代码还要简洁点
    return n%2*n-n/2;
      

  8.   

    if(n % 2)
     return -((n >> 2) + 1);
    else 
     return -(n >> 2);
     楼上的是呆瓜 坚定完毕。
      

  9.   

    假如我是项目经理,我也会叫你重做,楼主可要加油啊,你连最基本的编程原则都不知道,
    你看你写的程序,当我取n值为1时会怎么样,你想肯定会输出1,结果你的程序只会输出1/2,奇怪吧,1%2=1,执行-b+n;如果这段代码被用到你们公司的软件中去,会让QA疯掉,
      这就是编程的边界值原则,每编写一段代码,一定要查看它的边界值,建议看一下软件测试方面的书.
      

  10.   

    回:ljdfd
    我觉得楼主的没错啊,
    n为1时:b的值为0,(注意b的类型int)
            a的值为1,返回的值-b+n=1
    结果也是 1啊,没错。
      

  11.   

    回楼上,把小数赋给整型变量会引起精度丢失,必须进行强制转换就是
    int b = int(n/2);
    其实楼主的程序只加两排就完美了
    int b = n/2;
    int a = n%2;
    if(n==1)
    {
       return 1;
    }
    else if(a==0)
    {
      return -b;
    }
    else return -b+n;
      

  12.   

    不懂,等1的时候怎么结果会是1/2呢?
    回:ljdfd
    我觉得楼主的没错啊,
    n为1时:b的值为0,(注意b的类型int)
            a的值为1,返回的值-b+n=1
    结果也是 1啊,没错。
    呵呵,象zudy99老兄说的,这不是对嘛
      

  13.   

    不知道楼上的是怎么讨论的,经理的意思很明确,
    让你用计算机实现这个序列的求和,而不是计算这个序列。就好比让你计算5!,你编程打印5×4×3×2×1是不对的,应该用递归。
    javaalix()朋友的编程是正确的。
      

  14.   

    今天我重新看了这个帖子,我改变了看法。楼主,你是错的。int   b   =   n/2; //这句没有考虑到程序中的整数除法不可能得到浮点数的问题,比如3/2的结果不是1.5,而是1.其实最简单的方法是直接使用求和公式,代码如下:        public static int sum(int n) {
    return n * (n + 1) / 2;
    }
      

  15.   

    sorry,我刚才还看错了。
    是1-2+3-4+5-6+...+n,不是从1加到n,不过,解决的方法仍是先推算好,再写程序。
    当n为偶数的时候,结果为-n/2;
    当n为基数的时候,结果为-(n-1)/2 + n = (n+1)/2;到这里,程序就很容易写了add(int n) {
        if(a%2==0) {
            return -n/2;
        } else {
            return (n+1)/2;
        }
    }欣然看到楼上xiaozhou1121也是这样做的。我想一旦涉及数学运算的程序,应该先演算出一个表示结果的公式,再写程序,这样程序简洁、健壮;否则用程序臃肿,执行效率低下(能和直接使用公式比吗?),还容易出错。