程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
2011-10-30 18:16
302 查看
方法一:
5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略对二进制也是管用的。
int AddWithoutArithmetic(int num1, int num2)
{
if(num2 == 0)
return num1;
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
return AddWithoutArithmetic(sum, carry);
}
方法二:
使用地址偏移:
int add(int a,int b)
{
char * c;
c = (char *) a;
return (int)&c[b];
}
5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略对二进制也是管用的。
int AddWithoutArithmetic(int num1, int num2)
{
if(num2 == 0)
return num1;
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
return AddWithoutArithmetic(sum, carry);
}
方法二:
使用地址偏移:
int add(int a,int b)
{
char * c;
c = (char *) a;
return (int)&c[b];
}
相关文章推荐
- 程序员面试题精选100题(55)-不用+、-、×、÷做加法
- 程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
- 程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
- 程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
- 程序员面试100题之三:不用+、-、×、÷数字运算符做加法
- 程序员面试100题之三:不用+、-、×、÷数字运算符做加法
- 不用+、-、×、÷数字运算符做加法
- 不用+、-、×、÷数字运算符做加法
- 不用+、-、×、÷数字运算符做加法
- 不用+、-、×、÷数字运算符做加法—转自zhedahht.blog.163.com
- 程序员面试题精选100题-不用+、-、×、÷做加法[算法]
- 程序员面试题精选100题(55)-不用+、-、×、÷做加法
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- C语言中& | ^ ~ >> <<头疼的符号(不用+、-、×、÷做加法)
- 程序员面试题精选100题(10)-在排序数组中查找和为给定值的两个数字
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字
- 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]
- 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]
- 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字