剑指Offer - 九度1507 - 不用加减乘除做加法
2013-11-29 20:00
题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。

输出:

对应每个测试案例,输出m+n的值。

样例输入:
3 4
7 9
样例输出:
7
16
题意分析:
  求两个数的和而不能用加减乘除,很明显又得借助位运算了。回想一下学Verilog时加法器的实现,能记住下面这两个关系:
  sum = bit1 ^ bit2 ^ carry
  carry' = (carry & bit1) | (bit1 & bit2) | (bit2 & carry)
  其中sum是当前位的和,bit1和bit2是两数的当前二进制位,carry是上一位的进位,carry'是这一位的进位。
  简单解释一下俩式子:
    式子1:加法和异或的区别就在于加法可以进位,而异或不进位。
    式子2:三个数只要有两个以上的‘1’就有进位了,所以是三个
  接下来就是逐位相加,将进位carry一直向上传递了。要注意别让最高位的carry丢失掉,除非是超出了本身数据能表示的范围。
  既然是写个加法器,依然本着写Verilog的原则,拒绝for循环。以下是ac的代码。
 // 653474    zhuli19901106    1507    Accepted    点击此处查看所有case的执行结果    1020KB    1439B    10MS
//
#include <cstdio>
using namespace std; void cal_onebit(const int m, const int n, int i, int &carry, int &res)
{
res = (res |
(
(m & ( << i)) ^
(n & ( << i)) ^
(carry << i)
)
);
carry =
(
(m & ( << i)) &
(n & ( << i))
) ||
(
(n & ( << i)) &
(carry << i)
) ||
(
(carry << i) &
(m & ( << i))
);
} int main()
{
int m, n;
int res;
int carry; while(scanf("%d%d", &m, &n) == ){
carry = ;
res = ;
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
cal_onebit(m, n, , carry, res);
printf("%d\n", res);
} return ;
}

剑指Offer - 九度1507 - 不用加减乘除做加法的更多相关文章

  1. 剑指offer(48)不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目分析 不用加减乘除做加法,我第一时间想到的就是用位运算,毕竟计算机是二进制的,所有的操作都是以位运算为基础 ...

  2. 【剑指Offer】48、不用加减乘除做加法

      题目描述:   写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号.   解题思路:   本题同样是对发散思维能力的一个考察.首先,我们需要考虑是要求和却不能使用四则运算 ...

  3. 剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)

    剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)2014-02-05 19:37 题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.H ...

  4. 剑指Offer - 九度1348 - 数组中的逆序对

    剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...

  5. 剑指Offer - 九度1283 - 第一个只出现一次的字符

    剑指Offer - 九度1283 - 第一个只出现一次的字符2013-11-21 21:13 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出 ...

  6. 剑指Offer - 九度1524 - 复杂链表的复制

    剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...

  7. 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先

    剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...

  8. 剑指Offer - 九度1508 - 把字符串转换成整数

    剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...

  9. 剑指Offer - 九度1504 - 把数组排成最小的数

    剑指Offer - 九度1504 - 把数组排成最小的数2014-02-06 00:19 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...

随机推荐

  1. 西门子(SIEMENS)软件安装时需要重启的解决方法,regedit restart

    打开注册表(regedit) 删除注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manage\PendingFile ...

  2. python绘图 matplotlib教程

    mark一个很好的python绘图教程 https://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/

  3. php一个类引用另一个类的方法的写法

    default.php: <?php namespace SiteInfo{ class Site{ var $url; var $title; function setUrl($par){ $ ...

  4. SQL语句关于时间的查询小心得,希望大家给点意见

    完全使用时间函数去搞定查询日期,之前写的可能有些问题,现在删了修正一下 本月记录: SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())= ...

  5. Gym 100090M Jumping along the Hummocks

    题意: 从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数. dp,但是会tle,我用map优化了一下. #include <bits/stdc++.h ...

  6. ZooKeeper 完全分布式集群环境搭建

    1. 搭建前准备 示例共三台主机,主机IP映射信息如下: 192.168.32.101 s1 192.168.32.102 s2 192.168.32.103 s3 2.下载ZooKeeper, 以  ...

  7. failed to bind pixmap to texture

    问题描述:我用的是Ubuntue的操作系统,终端突然挂了.我重启了一下电脑,就进不去系统了. 日志信息:  failed to bind pixmap to texture 原因: 界面管理工具坏了, ...

  8. leetCode没那么难啦 in Java (一)

    前言    感觉写博客是一个很耗心力的东西T_T,简单的写了似乎没什么用,复杂的三言两语也只能讲个大概,呸呸...怎么能有这些消极思想呢QAQ!那想来想去,先开一个leetcode的坑,虽然已经工作了 ...

  9. 数据库MySQL基本介绍安装使用及文件导入导出

    1.数据库(data base) 1.1 简述 把文件存储在一台电脑上(服务器),其他电脑用户可以通过账号密码登陆,通过网络去访问这台电脑上的文件,但是由于每个人的数据是不同的,所以你只能通过自己的账 ...

  10. 关于webpack打包vue后vendor包过大的问题

    因为项目用到了elementUI,打包之后包括vue.axios.elementui之类的加起来有500kb,页面第一次打开会出现一阵白屏显示.在百度过后发现可以使用外链接而不用模块包. 博主使用的外 ...