a+b等于几(不用+)高级解法
来源:互联网 发布:网络等级保护 编辑:程序博客网 时间:2024/04/29 06:20
a+b等于几——高级解法
欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽我全力改正错误回答问题。在次谢谢大家。
实验环境
- 语言c/c++
- 编译器devc++5.11/5.40
实验内容与要求
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。说明a和b都是 32位 整数么?是的我可以使用位运算符么?当然可以样例如果 a=1 并且 b=2,返回3
目录
- ab等于几高级解法
- 实验环境
- 实验内容与要求
- 目录
- 实验解析
- 思路
- 前言
- 高级方法
- 二进制四种情况运算结果对比
- 函数说明
- 递归计算方法
- 非递归计算方法
- 主函数
- 结果展示
- 思路
- 附录
- 相关资料
- 源代码
- 递归解法
- 非递归解法
实验解析
思路
前言
简单方法确实想着简单,但是做起来还是分类挺多的,我们再来探究一下更简便的方法
不相同
初级解法
高级方法
二进制四种情况运算结果对比:
大家有没有看出些什么?与运算表示进位,异或运算表示原位
那么现在不用再一位一位运算了,可以整体与向右移位后加上异或结果,这里可以运用递归。
函数说明
递归计算方法
int calculate(int a,int b){ int sum =0,carry=0; if(a==0){ return b; } if(b==0){ return a; } sum = a^b; carry = a&b; carry = carry<<1; //左移 return calculate(sum,carry);}
非递归计算方法
int calculate(int a,int b){ int sum =0,carry=0; while(true) { if(a==0){ return b; } if(b==0){ return a; } sum = a^b; carry = a&b; carry = carry<<1; a = sum; b = carry; }}
主函数
main(){ int a,b; cin>>a>>b; cout<<calculate(a,b)<<endl; }
结果展示
附录
相关资料
- 参考资料
源代码
递归解法
#include <iostream>using namespace std;int calculate(int a,int b);main(){ int a,b; cin>>a>>b; cout<<calculate(a,b)<<endl; } int calculate(int a,int b){ int sum =0,carry=0; if(a==0){ return b; } if(b==0){ return a; } sum = a^b; carry = a&b; carry = carry<<1; return calculate(sum,carry);}
非递归解法
#include <iostream>using namespace std;int calculate(int a,int b);main(){ int a,b; cin>>a>>b; cout<<calculate(a,b)<<endl; } int calculate(int a,int b){ int sum =0,carry=0; while(true) { if(a==0){ return b; } if(b==0){ return a; } sum = a^b; carry = a&b; carry = carry<<1; a = sum; b = carry; }}
阅读全文
0 0
- a+b等于几(不用+)高级解法
- a+b等于几(不用+)
- A是否等于B?
- HDU1576 A/B (解法二)
- 实现随机整数[a,b),大于等于a,小于b
- a、b交换不用参数
- 不用加减乘除实现a+b
- 不用+号,实现a+b
- 不用中间变量交换 a ,b(三种方法)
- ZOJ 1001 A + B Problem(Java解法)
- HDOJ 1000 A + B Problem C++解法
- 1016.部分A+B的解法
- [题解+|高能+]A+B Problem花样解法
- 不用 ?: > < if 定义MAX(a,b)/MIN(a,b) 宏
- A+B不用算数运算符
- 不用中间量交换 a、b 值
- 交换a、b不用第三个参数
- 不用判断条件,取a,b最大值
- Ubuntu下用shell脚本实现俄罗斯方块游戏
- Redux 入门教程(一):基本用法
- Flood Fill(leetcode)
- AK(黄成佳):创业不易,且行且珍惜!
- 技术问答整理(5)
- a+b等于几(不用+)高级解法
- [腾讯]前端面试题整理
- 获取缓冲区
- JAVA程序员的进击之路——致一个程序员该有的自律
- 中国海洋大学各个校区都有什么专业
- Android 中 EditText 的 inputType 属性及其他常用属性详解
- 初探 HTML5 WebSocket(一)
- eclipse git 使用
- golang字符串不能为"nil"