- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想编写一个函数来查找给定乘数的数字的下一个倍数。源数和乘数都可以是 float 。
预期:
nextMult(3.654,0.5) = 4.0
nextMult(3.165,0.15) = 3.30
nextMult(3.452,0.002) = 3.452
nextMult(2, 0.3) = 2.1
nextMult(2, 0.2) = 2
nextMult(4, 3) = 6
我目前的解决方案:
public double nextMult(double source, double multiplier)
{
for (double i = (double)((long)source - multiplier); i <= source + multiplier;
i += multiplier)
{
if (i >= source)
return i;
}
}
我不喜欢多重类型转换。是否有更有效的方法或现有的图书馆解决方案可以做到这一点?
最佳答案
是的。由于您已经提供了一个有效的解决方案,您会注意到您已经提出了一个 O(n) 解决方案,该解决方案经过一定数量的操作并且在您找到它之前似乎递增。当您执行 nextMult(10000000000000, 1);
时,这会变得很可怕。我们会整天在这里手动迭代该循环。
然而,实际上有一个 O(1) 的解决方案。
int multiple = (int) (source / multiplier); //we get the whole number portion of the divided value, i.e. 4/3 = 1, 3.654/0.5 = 7
double remainder = source % multiplier; //we need to check for if it matches the higher
if(remainder > 0) {
multiple++; // and we want the next higher one
}
return multiplier * multiple;
也就是说,这只会处理正值。 我将把处理负值留给您作为练习。
编辑:您需要为模数实现 BigDoubles。 double 和模数显然互相讨厌。
关于java - 给定乘数的下一个数字倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002304/
我正在使用 iPhone 6 Plus,并使用以下方法获取 UIView 的边界: let viewBounds = view.bounds // GIVES 736 x 414 (Points),
我正在尝试在 R 的 Quantstrat 包中运行回测策略。该工具是小麦 future ,以美分报价。合约规模为 5000 蒲式耳。因此,我添加了以下代码。 future(symbols,
我正在尝试在 R 的 Quantstrat 包中运行回测策略。该工具是小麦 future ,以美分报价。合约规模为 5000 蒲式耳。因此,我添加了以下代码。 future(symbols,
我是 JavaScript 新手。我想在 Javascript 中使用 prompt() 制作一个乘法器来获取数字 n,这是我们的乘法器,我想将从 1 到 n 的所有数字与 n 数字相乘。示例: 如果
TLDR:我正在寻找一种算法,它可以在知道以下情况的情况下返回可变数字数组的最小可能的最不常见乘数: 其中一个数字 我的数组的大小 数字可能的最小值和最大值 我正在使用音乐应用程序并遇到算法问题:当混
如何为 gluCylinder() 和 gluDisk() 等函数设置纹理坐标偏移和乘数? 因此,如果正常情况下纹理会从点 0 开始,我想将其设置为从点 0.6 或 3.2 等开始。乘数意味着纹理会变
我尝试向后移动文件中的位置,但仅当我移动 512 字节时它才有效,为什么? _file = CreateFile(path, GENERIC_WRITE | GE
我正在尝试以编程方式在 swift 中为乘数设置约束,当我设置值时,它只会给我错误,“无法分配给该表达式的结果”... 我用 IBOutlet 声明了 NSLayoutConstraint,然后设置乘
我是一名优秀的程序员,十分优秀!