#include <iostream>
using namespace std;
int incr(int x){
return (x+1);
}
int add(int x, int y){
for (int i=0;i<x;i++)
y = incr(y);
return y;
}
int decr(int x){
int y = 0;
int z = 0;
for (int i=0;i<x;i++){
y = z;
z = incr(z);
}
return y;
}
int sub(int x, int y){
for (int i=0;i<y;i++)
x = decr(x);
return x;
}
bool isZero(int x) {
bool y = true;
for (int i=0;i<x;i++)
y = false;
return y;
}
bool lte(int x, int y){
int z = sub(x, y);
z = isZero(z);
return z;
}
bool gt(int x, int y){
int z = lte(x, y);
z = isZero(z);
return z;
}
int div_ceil(int x,int y){
int r = 0;
int t = x;
for (int i=0;i<x;i++){
int z = 0;
int l = gt(t,z);
r = add(r,l);
t = sub(t,y);
}
return r;
}
int div_floor(int x,int y){
int r = 0;
int t = 0;
for (int i=0;i<x;i++){
t = add(t,y);
int l = lte(t,x);
r = add(r,l);
}
return r;
}
int main(){
cout << "Checking div_ceil(x,y)" << endl;
cout << div_ceil(0,5) << endl;
cout << div_ceil(5,7) << endl;
cout << div_ceil(10,10) << endl;
cout << div_ceil(10,2) << endl;
cout << div_ceil(10,3) << endl;
cout << "Checking div_floor(x,y)" << endl;
cout << div_floor(0,5) << endl;
cout << div_floor(5,7) << endl;
cout << div_floor(10,10) << endl;
cout << div_floor(10,2) << endl;
cout << div_floor(10,3) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGluY3IoaW50IHgpewoJcmV0dXJuICh4KzEpOwp9CgppbnQgYWRkKGludCB4LCBpbnQgeSl7Cglmb3IgKGludCBpPTA7aTx4O2krKykKCQl5ID0gaW5jcih5KTsKCXJldHVybiB5Owp9CgppbnQgZGVjcihpbnQgeCl7CiAgICBpbnQgeSA9IDA7CiAgICBpbnQgeiA9IDA7CiAgICBmb3IgKGludCBpPTA7aTx4O2krKyl7CiAgICAgICAgeSA9IHo7CiAgICAgICAgeiA9IGluY3Ioeik7CiAgICB9CiAgICByZXR1cm4geTsKfQoKaW50IHN1YihpbnQgeCwgaW50IHkpewogICAgZm9yIChpbnQgaT0wO2k8eTtpKyspCiAgICAJeCA9IGRlY3IoeCk7CiAgICByZXR1cm4geDsKfQoKYm9vbCBpc1plcm8oaW50IHgpIHsKICAgIGJvb2wgeSA9IHRydWU7CiAgICBmb3IgKGludCBpPTA7aTx4O2krKykKICAgIAl5ID0gZmFsc2U7CiAgICByZXR1cm4geTsKfQoKYm9vbCBsdGUoaW50IHgsIGludCB5KXsKICAgIGludCB6ID0gc3ViKHgsIHkpOwogICAgeiA9IGlzWmVybyh6KTsKICAgIHJldHVybiB6Owp9Cgpib29sIGd0KGludCB4LCBpbnQgeSl7CiAgICBpbnQgeiA9IGx0ZSh4LCB5KTsKICAgIHogPSBpc1plcm8oeik7CiAgICByZXR1cm4gejsKfQoKaW50IGRpdl9jZWlsKGludCB4LGludCB5KXsKICAgIGludCByID0gMDsKICAgIGludCB0ID0geDsKICAgIGZvciAoaW50IGk9MDtpPHg7aSsrKXsKICAgICAgICBpbnQgeiA9IDA7CiAgICAgICAgaW50IGwgPSBndCh0LHopOwogICAgICAgIHIgPSBhZGQocixsKTsKICAgICAgICB0ID0gc3ViKHQseSk7CiAgICB9CiAgICByZXR1cm4gcjsKfQoKaW50IGRpdl9mbG9vcihpbnQgeCxpbnQgeSl7IAogICAgaW50IHIgPSAwOwogICAgaW50IHQgPSAwOwogICAgZm9yIChpbnQgaT0wO2k8eDtpKyspewogICAgICAgIHQgPSBhZGQodCx5KTsKICAgICAgICBpbnQgbCA9IGx0ZSh0LHgpOwogICAgICAgIHIgPSBhZGQocixsKTsKICAgIH0KICAgIHJldHVybiByOwp9CgppbnQgbWFpbigpewoJY291dCA8PCAiQ2hlY2tpbmcgZGl2X2NlaWwoeCx5KSIgPDwgZW5kbDsKCWNvdXQgPDwgZGl2X2NlaWwoMCw1KSA8PCBlbmRsOwoJY291dCA8PCBkaXZfY2VpbCg1LDcpIDw8IGVuZGw7Cgljb3V0IDw8IGRpdl9jZWlsKDEwLDEwKSA8PCBlbmRsOwoJY291dCA8PCBkaXZfY2VpbCgxMCwyKSA8PCBlbmRsOwoJY291dCA8PCBkaXZfY2VpbCgxMCwzKSA8PCBlbmRsOwoJCgljb3V0IDw8ICJDaGVja2luZyBkaXZfZmxvb3IoeCx5KSIgPDwgZW5kbDsKCWNvdXQgPDwgZGl2X2Zsb29yKDAsNSkgPDwgZW5kbDsKCWNvdXQgPDwgZGl2X2Zsb29yKDUsNykgPDwgZW5kbDsKCWNvdXQgPDwgZGl2X2Zsb29yKDEwLDEwKSA8PCBlbmRsOwoJY291dCA8PCBkaXZfZmxvb3IoMTAsMikgPDwgZW5kbDsKCWNvdXQgPDwgZGl2X2Zsb29yKDEwLDMpIDw8IGVuZGw7CgkKCXJldHVybiAwOwp9