不用中间变量交换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;
	}


测试了下,只有6是完数。

你可能感兴趣的:(变量)