据说某个公司有道笔试题是这样的:

求1+2+3+...+n,编程实现,但是不允许用if,while,for,?等语句,也不能用乘除法。当然肯定也不允许用pow这样的函数了。

我们都知道,1+2+3+...+n=n*(n+1)/2=(n*n+n)/2,一个数除以2,等于右移1位。比如4(二进制为100),右移1位则为2(二进制为10)。由于不能用乘除法,所以需要将n*n转换为加减法了。

回忆一下乘法的竖式计算方法,假设101×101,如下图所示:

1   0   1

1   0   1

———

1   0   1

0   0   0

1  0   1

------------------

1  0  2    0   1

则其计算过程就是一个乘数的每位与另一个乘数分别相乘,然后移位相加。所以n*n也可以转换成类似的方式来处理。假设n为32位整数,n*n也为32位整数,则n*n就是两个32位二进制数相乘。其实就是32个数相加,由上面的公式也可以看出来。
二进制乘法反而更简单,就如上图所示的一样,每位要么是0,要么是1,如果是0,则不用相加了,如果是1,则结果就需要加。具体做法就是n的每一位都跟n相乘,当然是要向前移一位,然后相加。
具体c++代码实现为:
int sum(int n)
{int result = n;((n>>1) & 1) && (result += (n<<1));((n>>2) & 1) && (result += (n<<2));
...((n>>31) & 1) && (result += (n<<31));return result >> 1;
}

需要说明的是&&符号,这里用到了编译器的优化功能,如果&&前面的表达式为false,则右边的表达式就不会执行。所以当某位为0的时候,就不需要相加了。

也谈1+2+3+...+n的解答相关推荐

  1. 车羊问题c语言编程,再谈“羊车门”问题

    摘要:本文通过对"羊.车"趣味问题的思考,提出了自己的见解,并分别运用逻辑推理.条件概率方法.计算机模拟这三种方法进行了解答,进一步对问题出现不同答案的原因进行了分析,最后得出结论 ...

  2. Web前端面试题(全锦集)

    1    第一部分: 聪明的猴子都在看右下角目录 点击查看更多资源 前端基础(HTML CSS JS基础) 1.    怎么让一个不定宽高的 DIV,垂直水平居中? 答:1.使用 CSS 方法: 父盒 ...

  3. 360和瑞星杀毒软件哪个好

    如果必须在这个中选择,那么就选择瑞星吧,瑞星现在也免费了. 网友解答: 现在瑞星不收费了,当然比360要强一些,不过360用途广泛一点. 网友解答: 360 杀毒永远比瑞星快那么一个节拍 网友解答: ...

  4. 正则式高人谈解答正则式的心得

    条件1: 长度为14个字符 条件2: 其中任意9个位置为数字,并且数字只能是(0,1,3) 条件3: 其余的位置全部为"-"符号 ------------------------- ...

  5. 微积分学在计算机科学中的应用,浅谈微积分学在中学数学教学中的应用解答.doc...

    题 目 浅谈微积分学在中学数学教学中的应用 学生姓名 何凯茜 学号 1109014004 所在学院 数学与计算机科学学院 专业班级 数学与应用数学专业数教1101班 指导教师 权双燕 完成地点 陕西理 ...

  6. 万字谈监控:解答Zabbix与Prometheus选型疑难

    Zabbix与Prometheus 读完本文,你将收获 两者适用于多大规模的监控场景?超过5000以上监控节点时怎么办?高可用怎么解决? 两者怎么解决存储问题?对于监控信息是否有历史存储和分析,能从历 ...

  7. 浅谈C语言将字符串中的空格替换成%20的几种方法(附图超级详细解答)

    文章目录 题目分析 暴力位移法 巧用数组法 高效倒放法 题目分析 将字符串中的空格替换为%20.样例: "abc defgx yz" 转换成 "abc%20defgx%2 ...

  8. 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】

    谈一谈浏览器解析CSS选择器的过程? 这是一道发散题,可以根据自己的理解自行解答. 在开始前,我们必须了解一个真相:为什么排版引擎解析 CSS 选择器时一定要从右往左解析? 简单的来说:浏览器从右到左 ...

  9. 浅谈三维点云中的几何语义

    前言: 本文介绍了点云中不可忽视的一项重要属性--几何语义,并尝试根据自己的理解和实践经验对其进行一些归纳总结,可能有些地方有理解有误,请大家抱着批判的态度学习. 正文: 关于点云的悠久历史本文不过多 ...

最新文章

  1. 谷歌BERT预训练源码解析(二):模型构建
  2. 转 机器学习系列 08:深入理解拉格朗日乘子法、KKT 条件和拉格朗日对偶性
  3. L4 如何在XCode中下进行工作
  4. python画树叶-使用Python turtle画分形树叶图
  5. Virtools学习(七)—2D Picking
  6. list排序_「肘后备急码」- C#对象List排序
  7. Win8系统搜索不到无线信号该怎么办?
  8. LeetCode 1071. 字符串的最大公因子
  9. 正则表达式(三)操作符的运算优先级、全部符号的解释
  10. [量子计算]量子计算的发展史与中国现在的量子计算整体水平
  11. java中元数据是什么_java 元数据
  12. 魔兽世界模型浏览器WowModelExplorer演示
  13. 教你快速录制gif动图
  14. MATLAB之GIF动图的绘制
  15. table——caption
  16. 11行代码实现滚动公告栏
  17. 1.5 18:鸡尾酒疗法
  18. 解压文件-提示:“必要的压缩卷不存在”
  19. 科创人·知乎CTO李大海:技术服务内容、商业化依赖内容,曾被「呵呵」难到挠头
  20. python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...

热门文章

  1. 苹果手机at系统_iOS14系统苹果手机如何设置充满电提示音?
  2. carplay是否可以用安卓系统_是否可以仅用键盘来操作Windows 10系统和Windows 10应用?...
  3. android操作系统优势,Android操作系统平台最大的优势
  4. Ubuntu环境下挂载新硬盘 --硬盘要挂载在某个文件夹下面
  5. 开启大数据时代谷歌三篇论文-Mapreduce
  6. 搭建Keras,TensorFlow运行环境
  7. 文巾解题 557. 反转字符串中的单词 III
  8. 文巾解题 21. 合并两个有序链表
  9. 机器学习经验总结-神经网络训练失败的一些常见原因
  10. 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探