C语言中的除法的计算
不用除号,计算除法运算。思路是使用减法运算!
思路1:循环采用减法每次减去n,直到做完减法之后结果小于0为止 但是这样次数较大
如求100/3,需要次数为34次。
思路2:循环采用减法每次减去k,K的值每次会增加2倍,也就是左移1位,这样来优化思路1的算法
如求100/3,需要次数为3*2^i == 100时候的i的值,i=5时 3*2^6=96,i=6时 3*2^6=128,再计算4中几个3即可
k = 3*2^0 sum = 1<<0;
= 3*2^1 sum = 1<<2;
. .
. .
= 3*2^5 sum = 1<<5;
= 3*2^6 sum !=1<<6; //因为3*2^6 == 128,这是边界值,3*2^5 < 100 < 3*2^6.100-3*2^5=4 > 3,故需要计算100-96中有多少个3
贴出思路2的代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 //计算 a/b 的值.
4 int div(int a, int b){
5 int m,n,k,i,sum,tmp;
6 //计算 m / n 的结果
7 m = a;
8 n = b;
9
10 k = n;
11 sum = 0;//最后结果
12 i = 0;//循环变量
13 //边界值判断
14 if(a < 0 || a < b)
15 return 0;
16
17 while(m >= k){
18 sum = 1<<i;
19 tmp = k;//记录扩大前的因子,供边界调试时候使用
20 k = k<<1;//因子不断的以2的倍数扩大
21 i++;
22 }
23 //比如100/4时,i=4时,k=64,sum=16;i=5时,k=128,此时100<128,需要再计算(100-64)中含有几个4,即下面的递推公式
24 sum += div(m-tmp,b);//边界值计算
25 return sum;
26 }
27 int main(int argc, char *argv[]){
28
29 int m,n,k,i,sum,tmp;
30 //计算 m / n 的结果
31 m = atoi(argv[1]);
32 n = atoi(argv[2]);
33 sum = div(m, n);
34 printf("减法%d/%d=%d\n",m,n,sum);
35 return 0;
36 }
C语言中的除法的计算的更多相关文章
- 04 Storage and Calculation C语言中的存储和计算
文章内容来源于Programming Hub的学习记录,本人整理添加了中文翻译,如有侵权,联系本人删除 Variables C语言中的变量 Let's extend our mainfunction ...
- 关于C语言中结构体大小计算
结构体大小的计算,.网上说法一大堆还都不一样分什么对齐不对齐,偏移量什么的.. 在此稍微举例简单总结下: 对齐原则:每一成员的结束偏移量需对齐为后一成员类型的倍数 补齐原则:最终大小补齐为成员中最大 ...
- C语言中结构体大小计算
1.普通结构体 struct student { char sex; char a; char b; int age; char name[100]; }; 该结构体大小为108 解答:1.先算str ...
- C语言中计算变量占用内存空间
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:
- C语言中复数运算及调用blas,lapack中复数函数进行科学计算
C语言中常用的数据类型主要int, float ,double ,char 等,但在科学运算中复数扮演着重要角色.这里讲下C语言中的复数运算以及如何调用blas,lapack库中的复数函数来进行科学计 ...
- C语言中的宏定义
目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...
- 《C语言深度剖析》学习笔记----C语言中的符号
本节主要讲C语言中的各种符号,包括注释符.单引号双信号以及逻辑运算符等. 一.注释符 注释符号和注释在程序的预编译期就已经被解决了,在预编译期间,编译器会将注释符号和注释符号之间的部分简单的替换成为空 ...
- C语言中函数参数传递
C语言中函数参数传递的三种方式 (1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值.(2)地址传递,就是把 ...
- 【R语言入门】R语言中的变量与基本数据类型
说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...
随机推荐
- 洛谷 P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
链接: P2252 [SHOI2002]取石子游戏|[模板]威佐夫博弈 前言: 第一眼大水题,第二眼努力思考,第 N 眼我是大水逼. 题意: 不看题目标题都应该能看出来是取石子类的博弈论. 有两堆石子 ...
- 『学了就忘』Linux基础 — 13、Linux系统的分区和格式化
目录 1.Linux系统的分区 (1)磁盘分区定义 (2)两种分区表形式 (3)MBR分区类型 2.Linux系统的格式化 (1)格式化定义 (2)格式化说明 1.Linux系统的分区 (1)磁盘分区 ...
- u-boot 1.1.6 start.S 代码学习<转>
---转自 http://blog.csdn.net/rockhard/article/details/4166642 ------ /* 参考了别人的一些笔记,看完了启动代码. 本文档记录在看代码时 ...
- nohup java -jar xx.jar & ,关闭窗口后退出进程
nohup java -jar dw-report..jar > dw-report.log & 自动退出命令在后台运行 xx.jar程序 明明已经加了"&" ...
- 深入探索 Linux listen() 函数 backlog 的含义
1:listen()回顾以及问题引入 2:正确的解释 3:实验验证 1:listen()回顾以及问题引入 listen()函数是网络编程中用来使服务器端开始监听端口的系统调用,首先来回顾下listen ...
- Java测试开发--Java基础知识(二)
一.java中8大基本类型 数值类型:byte.short.int .float.double .long 字符类型:char 布尔类型:boolean 二. 封装:将属性私有化,不允许外部数据直接访 ...
- Python Nose 自动化测试框架介绍
文章目录 1. unittest 简介 1.1 python 单元测试 1.2 unittest 测试框架 1.3 默认模式 1.4 手工模式 2. nose 扩展框架 2.1 `nose` 的安装和 ...
- 计算机网络-3-5-以太网MAC层及交换机
MAC层的硬件地址 在局域网中,硬件地址又称为物理地址或者MAC地址(因为这种地址用在MAC帧中) IEEE 802标准为局域网规定了一种48位(6字节)的全球地址,固化在适配器的ROM中. 如果计算 ...
- celery kill task
from celery.task.control import revokerevoke(task_id, terminate=True) https://stackoverflow.com/ques ...
- 华为C/C++编码规范+《数学之美》感想
1.排版 1.1 程序块要采用缩进风格编写, 缩进的空格数为4个.(说明: 对于由开发工具自动生成的代码可以有不一致)1.2 相对独立的程序块之间.变量说明之后必须加空行.1.3 循环.判断等语句中若 ...