K******g 发帖数: 1870 | 1 二进制加法
/**
* i.e.
*
* char a[] = "11";
* char b[] = "1";
* char *c = bstradd(a, b); // c is a pointer to "100"
**/
你这道题看上去简单,但是写起来好像很麻烦。是一道FB的面试题。 | d**e 发帖数: 6098 | 2 careercup 150 上面好像有道类似的,但就是十进制加法。
我下面的解法结果的最高位有可能为0,比如101 + 1结果会出现0110
#include
#include
using namespace std;
char badd(int x, int y, int & carry)
{
int z;
int v = x + y + carry;
if(v == 0)
{
z = 0;
carry = 0;
}
else if(v == 1)
{
z = 1;
carry = 0;
}
else if(v == 2)
{
z = 0;
carry = 1;
}
else
{
z = 1;
carry = 1;
}
return '0' + z;
}
char * bstradd(char * a, char * b)
{
char * c = 0;
【在 K******g 的大作中提到】 : 二进制加法 : /** : * i.e. : * : * char a[] = "11"; : * char b[] = "1"; : * char *c = bstradd(a, b); // c is a pointer to "100" : **/ : 你这道题看上去简单,但是写起来好像很麻烦。是一道FB的面试题。
| x****k 发帖数: 2932 | 3 char badd(int x, int y, int & carry) 可以用lookup table实现。
可以将a和b中较短的一个先copy到c中,高位补0,然后再循环相加,这样可以节省一个
循环。 |
|