对于两个整数a和b, 求a/b,可以从1开始枚举结果result,找到满足 result *b <= a的最大result即为所求,
这是一种可行的算法,但效率比较低,事实上,枚举result的时候,可以成倍的增加result,找到满足 result * b <= a的
最大result,然后把a减去 result * b, 接下来对余数a再次迭代,直到余数a比b小。
比如计算29/5的过程为:
(1)
a = 29, b = 5
找出满足b*i <= a的最大i, 依次计算:
b*1 = 5, b*2 = 10, b*4 = 20
所以最大的i = 4, 然后把a减去b*4,result加上4
a = a - b*4 = 9
result = result + 4 = 4
转步骤(2)
(2)
a = 9, b = 5
找出满足b*i <= a的最大i, 依次计算:
b*1 = 5
所以最大的i = 1, 然后把a减去b*1,result加上1
a = a - b*1 = 4
result = result + 1 = 5
转步骤(3)
(3)
a = 4, b = 5, a < b 算法停止,最后余数为a = 4, 结果为result = 5
#include <stdio.h>
#include <stdlib.h>
#define MASK 0x80000000
int div_int(int x, int y)
{
unsigned int flag, a, b, result, i;
flag = (x & MASK) ^ (y & MASK); /* 判断符号位 */
a = x = abs(x);
b = y = abs(y);
result = 0;
if (b == 0) {
printf("浮点数例外\n");
exit(0);
}
for (; a >= b; a -= b, b = y) {
for (i = 1; b <= a; b <<= 1, i <<= 1);
b >>= 1; i >>= 1;
result += i;
}
if (flag) {
return -result;
}
return result;
}
int main()
{
int a = -64;
int b = 4;
printf("%d\n", div_int(a,b));
return 0;
}
分享到:
相关推荐
在Python中,可以使用乘号(*)进行乘法运算,例如: ``` a = 2 b = 3 c = a * b print(c) # 输出6 ``` 除法运算是指将一个整数除以另一个整数,例如6/3=2。在Python中,可以使用除号(/)进行除法运算
基于FPGA的快速浮点除法器IP核的实现
二年级数学上册 5.1《初步认识除法算式和除号》综合习题2(无答案)(新版)冀教版 试题.doc
二年级数学上册 5.1《初步认识除法算式和除号》综合习题1(无答案)(新版)冀教版 试题.doc
算法题解-两数相除-不用除号-C语言,使用比较、加、减和位运算实现了32位有符号整数除法运算。
2016秋冀教版数学二年级上册5.1《初步认识除法算式和除号》教学课件
我们用软件编程的时候,用到除法的时候,一个/这样的除号就搞定了。但是如果用硬件来实现除法,又是怎么样实现的了。
我们用软件编程的时候,用到除法的时候,一个/这样的除号就搞定了。但是如果用硬件来实现除法,又是怎么样实现的了。
能够实现四则运算和乘方运算、赋值及报错的计算器 2018-12-4 -------------------------------------------------- 本程序的输入有三类:指令、赋值语句和计算式 这三类输入均允许在基本元素之间添加任意数目的...
除号的起源.docx
这本是市面上清晰度最高的版本,350M,共27个压缩包()。 之前上传过50M的版本,也很清晰,不想麻烦的朋友可以下这本! http://blog.csdn.net/yvonne_de/archive/2009/10/18/4694851.aspx
1.随机产生10以内的两个整数以及运算符(算数运算符)组成一个表达式(注:不允许产生运算符是除号并且除数为0的题目); 2.提供A B C D四个选项供用户进行选择答案,答案里只有一个是正确的而且位置不固定,其他三个...
乘号重载;除号重载;排序; 以数组数据为参数的方程式;数组左转;数组右转;左转 num 个数;下标 start 到 end 反转;左转 num 个数;从指定下标开始左转d个数;将从下标fi开始的d个元素与从下标si开始的d个元素...
二年级上册表内除法(一)知识点:1、除法的含义:只要是平均分,就可以用除法计算。2、在除法算式中,除号前面的数叫被除数,除号后面的数叫除数(除数不能为0),所得的结果叫商。【被除数÷除数
LaTex常用语法,例如乘号、除号、带余除法、分数、幂、下标、开方、方程组、求和、区间、矢量、插入图片等。
表2-1 I/O点分配 "输入设备 "输入点号 "输出设备 "输出点号 " "按键0-9 "00000~0000"加法指示灯"01010 " " "9 " " " "加号 "00010 "减法指示灯"01011 " "减号 "00011 "乘法指示灯"01012 " "乘号 "00012 "除法指示灯...
而对于JS来说,整数和浮点数都统称为number 类型,除此之外,number 类型还有一个很特殊的值,即NaN,它是用来表示是否属于number 类型的一种状态,而不是一个确切的值(所以,NaN不等于自身)。 那么,NaN值一般会...
输入source.tny文件,输出:token[40]、tokenstring[40][30]。...②修改代码使其能够识别:变量、数、赋值号、分号、加号、减号、乘号、除号。 ③通过使用TINY语言实现词法分析中运算符号(+-*/)的识别。
用来计算两个数字相加之和,2.用来拼接两个字符串 – 减号:1.用来计算两个数字相减之差,2.用在一个数字前面来标识成一个负数 * 乘号:用来计算两具数字相乘之积 / 除号:用来计算被除数除以除数后,所得的商 %...
四则运算包括加、减、乘、除四种运算,Python中可以使用加号(+)、减号(-)、乘号(*)和除号(/)来进行四则运算。下面我们来看一些例子: 1. 加法运算 a = 5 b = 3 c = a + b print(c) 输出结果为8,即5+3=8。 ...