赞
踩
题目一:两整数之和
给你两个整数
a
和b
,不使用 运算符+
和-
,计算并返回两整数之和。
首先,在不给用加法的情况,我们可以想到位运算,既然是两个数的运算,我们可以先假设a=3,
b=5,(所假设的数字补码同一位必须都是1的情况,不然考虑不全面)然后对这两数分别进行位运算,你会发现,异位是最接近的
两位为1变0,但没进位,接下来就要考虑进位,找到都为一的位数,那么就是按位与了,将按位与的往左挪一,再按位或,这就是此题解法
- int getSum(int a, int b){
- int c;
- while(b)
- {
- c=(unsigned int)(a&b)<<1;
- a^=b;
- b=c;
- }
- return a;
- }
此题图解,必须定义c变量否则异或的不是上一轮b的值。
2.递归乘法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
既然能使用+-号,那么就不需要位运算了(位运算太难想了),我们就用乘法的本质,一个数×几就等于几个这样的数相加
- int multiply(int A, int B){
- if(B>0)
- return multiply(A,B-1)+A;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。