#include <cmath>
#include <iostream>
#include <iomanip>
#include <limits.h>
int idiv_ceil ( int numerator, int denominator )
{
return numerator<0? numerator/denominator : (numerator + denominator - 1) / denominator;
}
void test( int n, int d )
{
int using_float = (int) std::ceil( (double)n / d );
int using_fn = idiv_ceil(n, d);
std::cout << std::setw(15) << n
<< std::setw( 5) << d
<< std::setw(15) << using_float
<< std::setw(15) << using_fn
<< std::setw( 8) << ((using_float == using_fn)? "ok" : "ERROR") << std::endl;
}
int main(void)
{
test(INT_MAX, 1);
test(-INT_MAX, 1);
test(INT_MIN, 1);
for( int n = -5; n < 5; n++ ) {
for ( int d = 1; d < 5; d++ ) {
test(n, d);
test(n, -d);
}
}
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8bGltaXRzLmg+CgppbnQgaWRpdl9jZWlsICggaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yICkKewogICAgcmV0dXJuIG51bWVyYXRvcjwwPyBudW1lcmF0b3IvZGVub21pbmF0b3IgOiAobnVtZXJhdG9yICsgZGVub21pbmF0b3IgLSAxKSAvIGRlbm9taW5hdG9yOwp9Cgp2b2lkIHRlc3QoIGludCBuLCBpbnQgZCApCnsKICAgIGludCB1c2luZ19mbG9hdCA9IChpbnQpIHN0ZDo6Y2VpbCggKGRvdWJsZSluIC8gZCApOwogICAgaW50IHVzaW5nX2ZuID0gaWRpdl9jZWlsKG4sIGQpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6c2V0dygxNSkgPDwgbgogICAgICAgICAgICAgIDw8IHN0ZDo6c2V0dyggNSkgPDwgZAogICAgICAgICAgICAgIDw8IHN0ZDo6c2V0dygxNSkgPDwgdXNpbmdfZmxvYXQKICAgICAgICAgICAgICA8PCBzdGQ6OnNldHcoMTUpIDw8IHVzaW5nX2ZuCiAgICAgICAgICAgICAgPDwgc3RkOjpzZXR3KCA4KSA8PCAoKHVzaW5nX2Zsb2F0ID09IHVzaW5nX2ZuKT8gIm9rIiA6ICJFUlJPUiIpIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4odm9pZCkKewogICAgdGVzdChJTlRfTUFYLCAxKTsKICAgIHRlc3QoLUlOVF9NQVgsIDEpOwogICAgdGVzdChJTlRfTUlOLCAxKTsKICAgIGZvciggaW50IG4gPSAtNTsgbiA8IDU7IG4rKyApIHsKICAgICAgICBmb3IgKCBpbnQgZCA9IDE7IGQgPCA1OyBkKysgKSB7CiAgICAgICAgICAgIHRlc3QobiwgZCk7CiAgICAgICAgICAgIHRlc3QobiwgLWQpOwogICAgICAgIH0KICAgIH0KfQo=