首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

讨论个简单的整除有关问题

2013-07-04 
讨论个简单的整除问题问题很简单, 就是把一个总的数目n进行分割, 能分成几块. 这个是大家平时常遇到的吧,

讨论个简单的整除问题
问题很简单, 就是把一个总的数目n进行分割, 能分成几块. 
这个是大家平时常遇到的吧, 之前面试也正好见过这样一道小题呢. 来提一下吧~

假设总数为n, 每块的大小为split, 则block_num = ?

我一般就是block_num = (0 == n % split) ? (n / split) : (n / split + 1);


有没有更高效的方法? 总觉得我这种求法是不是有点费劲...
[解决办法]
block_num = (n + split - 1)/split;
[解决办法]
block_num=(n-1)/split+1
最后一块可能比前面的小

[解决办法]
我#7楼讲的ceil floor就是数学上的概念
而你的问题本质就是ceil
floor到ceil  就是+1 - eps
 eps是一个足够小的数  当然你这里split为底 
最小精度 (float)1/split 就够用了而已 
ceil = (float)n/split + 1 - (float)1/split
再化简  使能直接使用整数相除
就是
ceil=(n-1)/split+1 这个才是本质
(n + split-1)/split 这个才是变形 
例 n + split-1 >int_max  && n<int_max 时 
“(n + split-1)/split”就溢出了
而“(n-1)/split+1”没有溢出
  
[解决办法]
ceil = floor(fval+1-eps)
floor = ceil(fval + eps - 1)
round = floor(fval +0.5)
round = ceil(fval -0.5+eps) 
floor = round(fval - 0.5)
ceil = round(fval + 0.5 - eps)

热点排行