一:不用中间变量交换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)
测试了下,只有6是完数。
分析:
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;
}
测试了下,只有6是完数。