avatar
这道题好像有点难# JobHunting - 待字闺中
K*g
1
二进制加法
/**
* i.e.
*
* char a[] = "11";
* char b[] = "1";
* char *c = bstradd(a, b); // c is a pointer to "100"
**/
你这道题看上去简单,但是写起来好像很麻烦。是一道FB的面试题。
avatar
d*e
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的面试题。

avatar
x*k
3
char badd(int x, int y, int & carry) 可以用lookup table实现。
可以将a和b中较短的一个先copy到c中,高位补0,然后再循环相加,这样可以节省一个
循环。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。