博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中整型运算取Ceiling问题
阅读量:5301 次
发布时间:2019-06-14

本文共 685 字,大约阅读时间需要 2 分钟。

转:

此题来自:《Linux C编程一站式学习》

假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。

网上对这道题只有答案和证明,我们虽然能证明答案的正确性却不知道答案是如何得出的,这篇文章填补了这一空白。

一位高手的推导(根据他的原文整理的):

设x=kn+b,b∈(0, n)且b∈Z,当b=0时,

(x+z)/n=k,即(kn+z)/n=k,根据题目要求,z最大为n-1;

当b≠0时,(x+z)/n=k+1,即(kn+b+z)/n=k+1,也就是(b+z)/n=1,由于b∈(0, n)且b∈Z,故b可取最小值1,此时z为n-1,当b取2时,z为n-2……当b=n-1时,z=1,可见不考虑特殊情况时,z最大为n-1;而当b=n-1时,z若为n-1,则(b+z)/n=2-2/n<2,也就是(kn+b+z)/n<k+2,依然可以取Ceiling。所以无论怎样z都可为n-1,即z=n-1。

∈[1, n-1],∵[

所以这个表达式应该写为:(x+n-1)/n

网上搜索到结果如下:

1、

if((x%n)>0){result =x/n+1;}
else{result=x/n;}

2、
(x+n-1)/n);
3、
(int)(((float)x/(float)n)+0.9))

转载于:https://www.cnblogs.com/unconstraint/p/3847886.html

你可能感兴趣的文章
Fine Uploader文件上传组件
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
consonant combination
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>