给定输入值会返回 1050、1150、1250、1350、1450 等值,

问题描述 投票:0回答:1

我正在开发一种 C++ 算法,给定一个浮点数作为输入,它会返回与以 50 结尾的数字最接近的值。抱歉,我不知道如何更好地解释它。举个例子,我的意思是,我需要这些数字:50、150、250、350、450、550 等。

换句话说,如果输入值在

[1050, 1100)
之间,它将返回1050,但是 如果值在
[1100, 1150]
之间,则返回 1150。

所以,这是我的算法,仅当输入值等于或大于 1000.0 时才有效:

  1. 将输入值除以 100.0。
  2. 取小数部分
  3. 如果派系部分大于或等于0.0且小于0.5,则整数部分加1。
  4. 整数部分乘以100。
  5. 结果加 50。

当输入为701.272时,它返回850.0,但它应该返回750.0

如果输入的数字小于 1000,可能问题是除以 100 并乘以 100。

我该如何修复这个算法?

algorithm
1个回答
0
投票

如果您将概述的算法应用到测试值中,您将直接看到问题出在哪里:

1) 701.272 / 100 = 7.01272 
2) frac := 0.01272
3) frac is in [0, 0.5] thus adding: 7+1 = 8 (here is the issue)
4) Scale up: 8*100 = 800
5) Add: 800+50 = 8500

正如我们所看到的,问题出现在步骤 3 中。这里您遇到了 if else 情况的问题。你只需要增加整数值,当

frac in [0.5, 1)

© www.soinside.com 2019 - 2024. All rights reserved.