在面试笔试中会考到这类题目,要求不用加减乘除运算来计算两数和,其实考的就是位运算。
规则1:
如果1010+0101 = 1111在计算上不产生进位, 则1010^0101 = 1010+0101 = 1111
上面1010和 0101 二进制加法计算的特点是没有进位,所以他们的二进制加法和按位异或运算结果才会相同。但是如果如果是二进制加法运算有进位,则明显以上等价关系就不能成立。
思路:如 20(10100)+25(11001) =45二进制加法运算会产生进位,那我们把他转换成a和b两个数 满足a+b = 20+25 = 45且a和b二进制加法不会产生进位,按照规则1有 20+25 = a + b = a ^ b,明显我们可以找到一个例子 a=32(100000) b=13(001101)满足上述要求。
如何找到a 和 b:
当产生进位的时候,我们可以试着把产生进制的位置找出来, 20(10100)+25(11001) 进行按位与运算
10100&11001 = 10000 可知道在最高位是两个1相与,故在最高位产生进位,10100^11001 = 01101这个结果是不进位的结果,只要我们把不进位的异或运算加上进位时候带来的结果增量加起来,就是我们最终想要的结果10100+11001 = 101101 .
结果为:10100^11001+(10100&11001)<<1 = 01101+10000 <<1
a = 01101
b = 10000 <<1 = 100000--->左移位后的结果即为进位产生的增量
如果a b还不满足上面思路中的要求的话,在继续重复上面的过程,知道找出满足思路中的啊a,b的值。
代码如下:
#include "stdio.h" int bitAdd(int a ,int b){ printf("第一次递归 bitAdd(%d ,%d )\n",a,b ); int jin = a&b;//进位 int notJin = a^b; if (jin!=0) { return bitAdd(jin<<1,notJin); }else{ return notJin; } return 0; } int main() { int a ,b; printf("输入两个数做加法(空格隔开)\n"); scanf("%d %d",&a,&b); printf("结果:%d+%d=%d",a,b,bitAdd(a,b)); return 0; }
结果:
相关推荐
- **支持加减乘除运算**:指该程序能够处理包含加、减、乘、除四种基本运算的数学表达式。 #### 描述解析 根据数据结构书编写,编译成功。例如:9/(1+2)# 输出结果为:3;输入9/(1+3)#输出结果为2.25 最后的结束符...
本主题聚焦于如何利用栈这一数据结构来处理数学表达式中的加、减、乘、除运算。栈是一种后进先出(LIFO)的数据结构,非常适合用于处理运算符的优先级问题。 首先,我们需要理解C++中的基本语法和类型。C++支持基本...
- 首先读取两个待加的数,分别存储在数组 `a[]` 和 `b[]` 中。 - 确定两个数的最大长度 `k`。 - 从最低位开始逐位相加,如果发生进位,则将当前位的结果除以 10 的商作为进位值传递到下一位。 - 最终遍历结果数组 `c...
例如,如果有一个表达式a * b + c,乘加运算会先计算a与b的乘积,然后将结果与c相加。这种运算在数学和工程领域十分常见,特别是在矩阵运算、微积分和物理方程求解中。在计算机硬件层面,高效的乘加单元(Multiplier...
8. **分数的混合运算**:涉及加、减、乘、除的混合运算时,需要遵循先乘除后加减的法则,并正确使用括号来确定运算顺序。 9. **解比例**:比例是两个比相等的关系,可以通过交叉相乘的方法来解。例如:`x:y = a:b`...
首先,多项式是由常数、变量和加减乘运算符组成的数学表达式,如 \( ax^n + bx^{n-1} + ... + cx^2 + dx + e \),其中 \( a, b, c, d, e \) 是系数,\( n \) 是一个非负整数,\( x \) 是变量。在计算机程序中,我们...
总的来说,使用链表表示大数并实现加减乘运算,可以灵活地处理任意大小的整数,而无需受制于固定大小的数据类型。这种实现方式不仅有助于理解大数计算的原理,而且在实际编程中也有很高的实用性。通过不断优化算法,...
在计算机科学领域,除法操作往往比加减乘等基本算术操作更为耗时。对于一些特定的除数,我们可以利用乘法与移位操作来近似地实现除法运算,这种方法不仅能够显著减少计算时间,而且在很多应用场景下都能得到足够精确...
- 大数加减乘除等运算的实现。 #### 字符读入 - 实现高效的字符读入功能,如读取单个字符、一行字符串等。 ### 三、数论算法 #### 数论基本算法 - **最大公约数 (Greatest Common Divisor)** - 定义:两个或多个...
本项目中,我们关注的是利用C语言实现多元式(多项式)的加减乘运算,这对于理解和掌握数值计算以及计算机科学中的代数理论至关重要。 一元多项式是指形如 `ax^n + bx^(n-1) + ... + cx^1 + d` 的数学表达式,其中a...
在计算机科学中,算术表达式通常包括数字、运算符(如加、减、乘、除)以及括号,用于表示数学计算。本工程可能采用了中缀表达式(即常见的运算符在操作数之间的形式,如2 + 3)或后缀表达式(也称为逆波兰表示法,...
- 支持加、减、乘、除四种基本运算。 - 可以处理包含括号的表达式。 - 提供动态输入和实时输出的功能。 3. **算法设计**: - 使用两个栈:一个运算符栈(OPTR)用于存储运算符,一个操作数栈(OPND)用于存储...
- 判断操作类型:根据用户输入确定是加、减、乘还是除。 - 执行运算:根据操作类型调用相应的运算子程序。 - 结果处理:存储结果并可能显示给用户。 - 错误处理:处理可能出现的异常,如除数为零等。 四、源码分析 ...
在题目中,例如“2a+3b”和“a+b”就是简单的整式,它们可以通过加减运算合并。例如,长方形周长的计算涉及到整式的加法。 2. **同类项**:同类项是指含有相同字母并且字母的指数相同的项。在题目4中,判断两个项...
* 假设变量 a 的值是 1,变量 b 的值是 2,变量 c 的值是 3,计算下列表达式的值。 + a^3+b*c + 7c mod b +a + 2int(c/b) >b-a + Fa<b and (c-a)/2>0 + Ta+b>c or b+c>a and c+a>b 二、算法的一些概念 * 用...
1. **基础操作**:对于两个数a和b,有四种基本运算:a+b、a-b、a*b、a/b(b≠0)。 2. **扩展操作**:如果还有两张以上的数,可以先对其中两张进行基础操作,再与其他数进行组合。 3. **括号使用**:为了改变运算...
- **多项式**:是由变量与常数通过加减乘运算组合而成的表达式,形如 \(a_nx^n + a_{n-1}x^{n-1} + \cdots + a_1x + a_0\),其中 \(a_n, a_{n-1}, \ldots, a_1, a_0\) 为系数,\(n\) 为该多项式的次数。 - **基础篇*...
- **四则运算**:对`a`与`b`进行加、减、乘、除四种运算,并将结果存储在新创建的对象`ab`中。 - **递进组合**:继续嵌套循环,依次选择第三个数字(`c`)和第四个数字(`d`),确保它们不与前两个数字重复。 - **...
算术运算符包括加(+)、减(-)、乘(*)、除(/)、乘方(^)和求余(mod),它们用于处理数值的计算。数值关系运算符如大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于()和不等于()用于比较两个...
- 利用分配律,如(a+b)c=ac+bc,a(b+c)=ab+ac,可使计算简化。 - 运用结合律和交换律,改变运算顺序,使计算更为便捷。 3. **混合运算的顺序**: - 先乘除后加减,同级运算从左到右。 - 括号内的运算优先于括号...