求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 
   数据范围: 
进阶: 空间复杂度) ,时间复杂度
 ,时间复杂度 )
 
                                        进阶: 空间复杂度
 public static int Sum_Solution(int n) {
        int sum = n;
        boolean flag = (sum > 0) && ((sum += Sum_Solution(--n)) > 0);
        return sum;
    }
   public static int Sum_Solution1(int n) {
        return (int) (Math.pow(n, 2) + n) >> 1;
    }
 public static int Sum_Solution2(int n) {
        int res = 0;
        int a = n;//若a=2=10
        int b = n + 1;//b=3=11
        while (a != 0) {
            if ((a & 1) == 1)//a在第二位==1的时候才更新res=0+110=6
                res += b;
            a >>= 1;//a右移1位 1
            b <<= 1;//b左移动1位 110
        }
        return res>>=1;//n(n+1)/2     }
  public int Sum(int n) {
        int res = multi(n, n + 1);//n*(n-1)
        return res>>=1;//n*(n-1)/2
    }
    
    private int multi(int a, int b) {
        int res = 0;
        //循环体内部, if ((a & 1) == 1), res += b;
        boolean flag1 = ((a & 1) == 1) && (res += b) > 0;
        a >>= 1;
        b <<= 1;
        // while (a != 0) {}循环条件
        boolean flag2 = (a != 0) && (res += multi(a,b)) > 0 ;
        return res;
    }
 temp[] test = new temp[n]
public class Solution {
    public int Sum_Solution(int n) {
        int result = 0;
        int a = 1;
        boolean value = ((n!=0) && a == (result = Sum_Solution(n-1)));
        result += n;    
        return result;
    }
}
# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
		return n and (n + self.Sum_Solution(n - 1))
1.
import java.util.*;
public class Solution {
    public int Sum_Solution(int n) {
        int sum = n;
        boolean ans = (n>0)&&((sum+=Sum_Solution(n-1))>0);
        return sum;
    }
}
2.
import java.util.*;
public class Solution {
    public int Sum_Solution(int n) {
        n = (int)(Math.pow(n,2)+n)>>1;
        return n;
    }
}
	
 解题的关键是使用递归,利用递归代替了循环,并且使用逻辑与运算判断n何时为0 class Solution: def __init__(self): self.sum = 0 def Sum_Solution(self, n): # write code here def recur(n): self.sum += n n -= 1 return (n>0) and self.Sum_Solution(n) recur(n) return self.sum 函数recur()实现了循环,从n一直递减加到了1,逻辑与and操作实现了当n=0时,不再计算Sum_Solution(n), 返回self.sum
先取对数再指数算回去。就不用傻傻的递归。
class Solution {
public:
    int Sum_Solution(int n) {
        //return n*(n+1)/2;
        return multi(n, n + 1) >> 1;
    }
    int multi(int a, int b){
        // we can guarantee that both a and b is positive integers
        int res = int(pow(10, log10(a) + log10(b))+0.5);
        return res;
    }
};
解题思路:
1.需利用逻辑与的短路特性实现递归终止。 2.当n==0时,(n>0)&&((sum+=Sum_Solution(n-1))>0)只执行前面的判断,为false,然后直接返回0;
3.当n>0时,执行sum+=Sum_Solution(n-1),实现递归计算Sum_Solution(n)。
    public int Sum_Solution(int n) {
    	int sum = n;
    	boolean ans = (n>0)&&((sum+=Sum_Solution(n-1))>0);
    	return sum;
    }
public class Solution {
    public int Sum_Solution(int n) {
        n = n == 1 ? 1 : n + Sum_Solution(n-1);
        return n;
    }
} public class Solution {
    public int Sum_Solution(int n) {
        //数学对数原理:
        // log(a)+log(b) = log(a*b)
        //log(a)-logb = log(a/b)
        //所以log(ret)= log((1+n)*n/2)
        //通过等号两边同时去掉对数取得ret,并消除误差即可
        //假设log(a,N)表示底数为a,真数为N的对数,则a^log(a,N) = N
        //所以ret = 10^log(10,N) = 10^log10(N) = N
        double a = Math.log10(1+n) + Math.log10(n);
        double b = Math.log10(2);
        int ret = (int)(Math.pow(10,a-b)+0.5);//可通过四舍五入消除误差
        return ret;
    }
} 静态变量C++ class Temp {
public:
    static int sum;
    static int s;
    Temp() {
        ++s;
        sum += s;
    }
};
int Temp::sum = 0;
int Temp::s = 0;
class Solution {
public:
    int Sum_Solution(int n) {
        vector<Temp> tmp(n);
        int res = Temp::sum;
        Temp::sum = 0;
        Temp::s = 0;
        return res;
    }
}; class Solution {
public:
    int Sum_Solution(int n) {
        bool res[n][n+1];
        return sizeof(res) >> 1;
    }
};
     /*
    用递归。
    
    声明sum与n分开,避免混乱。
    用boolean类型的中间变量,使用&&的短路规则,进行递归结束。
    */
    public int Sum_Solution(int n) {
        //声明sum与n分开,避免混乱
        int sum = n;
        //用boolean类型的中间变量,使用&&的短路规则,进行递归结束
        boolean flag = (n > 0) && ((sum += Sum_Solution(n-1)) > 1);
        return sum;
    } # -*- coding:utf-8 -*- class Solution: def __init__(self): self.choice = ['Solution().StopCur(n-1)', 'Solution().Sum_Solution(n-1)'] def Sum_Solution(self, n): # write code here return n + eval(self.choice[not not n]) def StopCur(self, n): return 0
class Solution {
public:
    int Sum_Solution(int n) {
       int m=multi_32(n,n+1,0)>>1;
       return m;
    }
    
    int multi_2(int a,int b,int start){
        //const int MASK=0x00000003<<start;
        const int MASK_1BIT=0x00000001<<start;
        
        int sum=0;
        const int a1=a &  (MASK_1BIT<<1);
        const int a2=a &  MASK_1BIT;
        const int b1=b &  (MASK_1BIT<<1);
        const int b2=b &  MASK_1BIT;
        
        sum=(a1&b1)<<(start+1) ;
        sum+=(a2&b2)<<start;
        sum+= ( ( a2&(b1>>1) )+( (a1>>1)&b2)  )<< (start+1);
        return sum;
        
    }
    
    int multi_4(int a,int b,int shift){
       // const int MASK=0x0000000f<<shift;
        const int MASK_2BIT=0x00000003<<shift;
        
        const int a1=a&(MASK_2BIT<<2);
        const int a2=a&MASK_2BIT;
        const int b1=b&(MASK_2BIT<<2);
        const int b2=b&MASK_2BIT;
        
        int sum;
        sum=multi_2(a1, b1, shift+2);
        sum+=multi_2(a2, b2, shift);
        sum+=multi_2(a1>>2, b2, shift)<<2;
        sum+=multi_2(a2, b1>>2, shift)<<2;
        
        return sum;
    }
    
    int multi_8(int a,int b,int shift){
        const int MASK_4BIT=0x0000000f<<shift;
        
        const int a1=a&(MASK_4BIT<<4);
        const int a2=a&MASK_4BIT;
        const int b1=b&(MASK_4BIT<<4);
        const int b2=b&MASK_4BIT;
        
        int sum;
        sum=multi_4(a1, b1, shift+4);
        sum+=multi_4(a2, b2, shift);
        sum+=multi_4(a1>>4, b2, shift)<<4;
        sum+=multi_4(a2, b1>>4, shift)<<4;
        
        return sum;
    }
    
    int multi_16(int a,int b,int shift){
        const int MASK_8BIT=0x000000ff<<shift;
        
        const int a1=a&(MASK_8BIT<<8);
        const int a2=a&MASK_8BIT;
        const int b1=b&(MASK_8BIT<<8);
        const int b2=b&MASK_8BIT;
        
        int sum;
        sum=multi_8(a1, b1, shift+8);
        sum+=multi_8(a2, b2, shift);
        sum+=multi_8(a1>>8, b2, shift)<<8;
        sum+=multi_8(a2, b1>>8, shift)<<8;
        
        return sum;
    }
    
    int multi_32(int a,int b,const int shift){
        const int MASK_16BIT=0x000000ff<<shift;
        
        const int a1=a&(MASK_16BIT<<16);
        const int a2=a&MASK_16BIT;
        const int b1=b&(MASK_16BIT<<16);
        const int b2=b&MASK_16BIT;
        
        int sum;
        sum=multi_16(a1, b1, shift+16);
        sum+=multi_16(a2, b2, shift);
        sum+=multi_16(a1>>16, b2, shift)<<16;
        sum+=multi_16(a2, b1>>16, shift)<<16;
        
        return sum;
    }
}; 
class Solution { public: int Sum_Solution(int n) { int ans = n; ans && (ans += Sum_Solution(n - 1)); return ans; } };