剑指offer--46.47.发散思维能力

发散思维能力的特点是思维活动的多向性和变通性,即我们在思考问题时注重运用多思路、多方案、多途径地解决问题,对于同一个问题,可以从不同的方向、侧面和层次,采用探索、转换、迁移、组合和分解等方法,提出多种创新解法。

题目一:求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句

分析:使用逻辑与短路特性来实现递归的终止条件

public class wr46Sum {
	 public static int Sum_Solution(int n){
		 int sum=n;
		 boolean flag=(n>0)&&((sum+=Sum_Solution(n-1))>0);
		 return sum;
	 }
	 public static void main(String []args){
		 System.out.println(Sum_Solution(10));
	 }
}

题目二:写一个函数,求两个整数之和,不能使用加减乘除四则运算符号

分析:可考虑二进制及位运算,第一步,各位相加但不计进位;第二步,计算进位;第三步,把前两步的结果相加。对于各位相加但不进位,即0+0=0, 0+1=1, 1+0=1, 1+1=0,即异或;对于进位,只有1加1时会产生进位,向前进位,即两个数先做位与运算,然后向左移动一位;第三步相加,依然是前两步的重复,直到不产生进位为止

public class wr47Add {
	public static int Add(int num1,int num2){
		int sum;
		while(num2!=0){
			sum=num1^num2;//不计进位,二进制相加,异或
			num2=(num1&num2)<<1;//进位,只有1+1时有进位,先做位与,然后向左移动一位
			num1=sum;
		}
		return num1;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Add(5,17));
	}

}

猜你喜欢

转载自blog.csdn.net/Autumn03/article/details/80380376
今日推荐