【向上取整/向下取整】C语言向上或向下取整 函数

C语言有以下几种取整方法:

1、直接赋值给整数变量。如:

int i = 2.5; 或 i = (int) 2.5;

这种方法采用的是舍去小数部分

2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。

3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:

floor(2.5) = 2

floor(-2.5) = -3

4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:

ceil(2.5) = 3

ceil(-2.5) = -2

floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。

但是在C里面ceil和floor()函数是返回double型,

先在网上发现一个简单的向上取整方法;

这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?

我们可以证明:

<N/M>=[(N-1)/M]+1    (0<M<=N,M,N∈Z)

不失一般性,我们设N=Mk+r(0<=r<M),

1)当r>0时,

左边:<N/M>=<(Mk+r)/M>=<k+r/M>=k+<r/M>=k+1

右边:[(N-1)/M]+1=[(Mk+r-1)/M]+1=[k+(r-1)/M]+1=k+1+[(r-1)/M]=k+1

2)当r=0

左边:<N/M>=k

右边:[(N-1)/M]+1=[(Mk-1)/M]+1=[(M(k-1)+M-1)/M]+1=[k-1+(M-1)/M]+1=k+[(M-1)/M]=k

命题得证。

有了这个公式,我们在代码里可以这样计算:

int nn=(N-1)/M +1

.

因为‘/‘是往下取整的。

时间: 2024-10-19 16:25:21

【向上取整/向下取整】C语言向上或向下取整 函数的相关文章

C语言向上、向下取整

C语言有以下几种取整方法: 1.直接赋值给整数变量.如: int i = 2.5; 或 i = (int) 2.5; 这种方法采用的是舍去小数部分 2.C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关. 3.使用floor函数.floor(x)返回的是小于或等于x的最大整数.如: floor(2.5) = 2 floor(-2.5) = -3 4.使用ceil函数.ceil(x)返回的是大于x的最小整数.如: ceil(2

给定一整型数组,若数组中某个下标值大的元素值小于某个下标值比它小的元素值,称这是一个反序

[问题] 找出反序的个数 给定一整型数组,若数组中某个下标值大的元素值小于某个下标值比它小的元素值,称这是一个反序. 即:数组a[]; 对于i < j 且 a[i] > a[j],则称这是一个反序. 给定一个数组,要求写一个函数,计算出这个数组里所有反序的个数. [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> int sumNum = 0; void merge(int *a,

jsp下拉框中显示数据库信息&&jsp 下拉框从数据库中如何取值?

jsp下拉框中显示数据库信息 <select> <option value=0>-- 请选择 --</option> <% dao d=new dao();// 这是那个数据库访问的类. List list=d.getData(); for(int i=0;i<list.size();i++) { %> <option value=<%=i+1%>><%=list.get(i)%></option> &l

Java语言实现通过Ajax抓取后台数据及图片

1.Java语言实现通过Ajax抓取后台数据及图片信息 1.1数据库设计 create table picture( pic_id number not null, pic_name varchar(200)not null, pic_url varchar2(200) not null, pic_descp varchar2(200) not null, pic_price varchar2(200) not null ) insert into picture values(1 ,'小米5s

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.

通过取父级for循环的i来理解闭包,iife,匿名函数

在使用for循环的时候,假如需要在循环体中添加一个匿名函数处理其他的事情,那么,在这个匿名函数内,如果需要用到对应的i,因为闭包的缘故,循环体循环结束后才返回i,所以i最终为最后一次++的数值. 闭包即函数有权访问另一函数的局部变量,常用方法为在函数内部创建另一个需要引用这个函数内部变量的函数. 解决方式1 通过匿名函数传参,因为匿名函数取得参数是每次for循环里的i,所以每次打印的值为0,1,2,...... 匿名函数自我执行的方法是,在函数体外套一对圆括号,形成一个表达式,在圆括号后再加另一

5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴

5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制.剪切和粘贴 5.1 vim介绍 vim 是 vi的一个升级版本 vim 是带有颜色显示的 再试下vim 命令 [[email protected] ~]# vi /etc/passwd[[email protected] ~]# vim /etc/passwd-bash: vim: 未找到命令 [[email protected] ~]# yum install -y vim-e

Linux下more命令C语言实现实践

1. more第一版 实现基础功能,显示每一页固定24行文本,"q Enter"退出, "Enter" 下一行, "space Enter"下一页. /************************************************************************* > File Name: more01.c > Author: qianlv > Mail: [email protected] &

破解windows下MySQL服务启动不了的情况下不能对其进行完全卸载的解决方案

以下的文章主要介绍的是在MySQL服务启动不了的情况下,不能对其进行完全卸载的实际解决办法的描述,以下就是对解决MySQL服务启动不了的情况下具体方案的描述,希望在你今后的学习中会对你有所帮助. MySQL 5.1 安装过程中报apply security setting错误的解决办法 1, 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\Application Data\MySQL 3, 重新安装MySQL 就 OK 啦 [MySQL]