Блог пользователя lanobezkari

Автор lanobezkari, 20 месяцев назад, По-английски

Hi everyone,

I'm trying to solve this problem.

But my program gives wrong answer for this test case:

1
3 85
33 7 85

cause of the error is because normally

ceil(( 100.00 / 85.00 ) * 85.00 ) = 100

but my program returns answer as 101.

I guess its because CPP can't find exact result of ( 100 / 85 ) so it returns ( 100.00 / 85.00 ) * 85.00 ) something like 100.000001 and ceil function rounds the number up.

Is there a way to fix this?

Thanks in advance.

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
20 месяцев назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

You should probably read this.

TLDR: You should never use floor() or ceil() in c++ if you're dealing with integers. And in fact you should never use any floating-point numbers if you're only dealing with integers.

In order to calculate ceil(a / b) for integers, do (a + b - 1) / b, but be careful with negative numbers as the behaviour may be unexpected.

It seems that in your case, you might need to rewrite your calculations a little bit before you can get this to work.