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