十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Lintcode T1.~T.10

Lintcode T1.~T.10 1 · A B 问题基础classSolution{public:/** * param a: An integer * param b: An integer * return: The sum of a and b */inta,b;intaplusb(inta,intb){// write your code herereturnab;//返回ab也就是总和}};挑战1.无进位相加‌使用 ‌异或运算 (^)‌。异或的特性是相同为0不同为1。0 ^ 0 0,0 ^ 1 1,1 ^ 0 1,1 ^ 1 0。这正好对应了二进制加法中“不考虑进位”时的本位结果。2.计算进位‌使用 ‌与运算 () 左移 ( 1)‌。只有当两个位都为1时才会产生进位。1 1 1其他情况均为0。进位需要加到更高一位所以结果要左移1位(a b) 1。‌迭代处理‌将“无进位和”作为新的a。将“进位值”作为新的b。重复上述过程直到进位b变为 0此时的a即为最终结果。classSolution{public:/** * param a: An integer * param b: An integer * return: The sum of a and b */inta,b;intaplusb(inta,intb){// write your code herewhile(b!0){//在b为0的时候说明前面没有进位a便为abintsuma^b;//无进位intcarry(ab)1;//二进制两位都为1是再进位//迭代相当于在二进制的每一位上把b的值加给aasum;//把sum赋值给abcarry;//把carry赋值给b}returna;//返回a的值也就是总和}};这个题是二进制运算的一道好题目值得推荐敬请期待
返回列表