不用中间变量交换a b的值及完数
一:不用中间变量交换a b值。
分析:
a=a+b; #将a b的和赋值给a
b=a-b; #a的值已经发生变化,并且保存了和值,因此这里要只能对b进行求值,不能改变a的值。
a=a-b; #同理求得a值。
另一种解法:
a=a^b
b=a^b
a=a^b
^ 异域: a^b === a & ~b
完数:
一个数的所有因子(不包括自身)相加等于自身,则该数就是完数。如6的因子是1 2 3, multiply(1,2,3) == sum(1,2,3)
/** * 取得所有因子(不包括1和自身) * @param num * @return */private List<Integer> findAllFactor(int num){List<Integer> list = new ArrayList<Integer>();boolean found = false;for (int i = 2; i <= Math.sqrt(num); i++){if (num % i == 0){found = true;list.add(i);list.addAll(this.findAllFactor(num / i));break;}}if (!found){list.add(num);}return list;}