#include <stdio.h>
char add(char a, char b)
{
char r = 0;
char n = 0;
r |= (a & 0x1) ^ (b & 0x1);
n = (a & 0x1) & (b & 0x1);
r |= (((a >> 1) & 0x1) ^ ((b >> 1) & 0x1) ^ n) << 1;
n = (((a >> 1) & 0x1) & ((b >> 1) & 0x1)) | (((a >> 1) & 0x1) & n) | (n & ((b >> 1) & 0x1));
r |= (((a >> 2) & 0x1) ^ ((b >> 2) & 0x1) ^ n) << 2;
n = (((a >> 2) & 0x1) & ((b >> 2) & 0x1)) | (((a >> 2) & 0x1) & n) | (n & ((b >> 2) & 0x1));
r |= (((a >> 3) & 0x1) ^ ((b >> 3) & 0x1) ^ n) << 3;
n = (((a >> 3) & 0x1) & ((b >> 3) & 0x1)) | (((a >> 3) & 0x1) & n) | (n & ((b >> 3) & 0x1));
r |= (((a >> 4) & 0x1) ^ ((b >> 4) & 0x1) ^ n) << 4;
n = (((a >> 4) & 0x1) & ((b >> 4) & 0x1)) | (((a >> 4) & 0x1) & n) | (n & ((b >> 4) & 0x1));
r |= (((a >> 5) & 0x1) ^ ((b >> 5) & 0x1) ^ n) << 5;
n = (((a >> 5) & 0x1) & ((b >> 5) & 0x1)) | (((a >> 5) & 0x1) & n) | (n & ((b >> 5) & 0x1));
r |= (((a >> 6) & 0x1) ^ ((b >> 6) & 0x1) ^ n) << 6;
n = (((a >> 6) & 0x1) & ((b >> 6) & 0x1)) | (((a >> 6) & 0x1) & n) | (n & ((b >> 6) & 0x1));
r |= (((a >> 7) & 0x1) ^ ((b >> 7) & 0x1) ^ n) << 7;
return r;
}
char sub(char a, char b)
{
return add(a, add(~b, 1));
}
char cmp(char a, char b, char c)
{
return (~(add(~add(a, b), add(c, 1)) >> 7)) & 0x1;
}
char mask(char a)
{
return (a | a << 1 | a << 2 | a << 3 | a << 4 | a << 5 | a << 6 | a << 7);
}
char ds(char *sum, char *d, char *r, char a, char b)
{
char c = cmp(*sum, b, a); *d = add(*d, c); *sum = add(*sum, b & mask(c)); *r = sub(*r, b & mask(c));
}
char ds8(char *sum, char *d, char *r, char a, char b)
{
ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b);
ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b); ds(sum, d, r, a, b);
}
char ds128(char *sum, char *d, char *r, char a, char b)
{
ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b); ds8(sum, d, r, a, b);
}
char div(char a
, char b
, char *r
) {
char sum = 0, d = 0;
*r = a;
ds128(&sum, &d, r, a, b);
return d;
}
int main(void) {
int a, b;
char reminder, division;
scanf("%d / %d", &a
, &b
); division
= div(a
, b
, &reminder
); printf("%d / %d = %d (%d)", a
, b
, division
, reminder
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpjaGFyIGFkZChjaGFyIGEsIGNoYXIgYikKewoJY2hhciByID0gMDsKCWNoYXIgbiA9IDA7CglyIHw9IChhICYgMHgxKSBeIChiICYgMHgxKTsKCW4gPSAgKGEgJiAweDEpICYgKGIgJiAweDEpOwoJciB8PSAoKChhID4+IDEpICYgMHgxKSBeICgoYiA+PiAxKSAmIDB4MSkgXiBuKSA8PCAxOwoJbiA9ICgoKGEgPj4gMSkgJiAweDEpICYgKChiID4+IDEpICYgMHgxKSkgfCAoKChhID4+IDEpICYgMHgxKSAmIG4pIHwgKG4gJiAoKGIgPj4gMSkgJiAweDEpKTsKCXIgfD0gKCgoYSA+PiAyKSAmIDB4MSkgXiAoKGIgPj4gMikgJiAweDEpIF4gbikgPDwgMjsKCW4gPSAoKChhID4+IDIpICYgMHgxKSAmICgoYiA+PiAyKSAmIDB4MSkpIHwgKCgoYSA+PiAyKSAmIDB4MSkgJiBuKSB8IChuICYgKChiID4+IDIpICYgMHgxKSk7CglyIHw9ICgoKGEgPj4gMykgJiAweDEpIF4gKChiID4+IDMpICYgMHgxKSBeIG4pIDw8IDM7CgluID0gKCgoYSA+PiAzKSAmIDB4MSkgJiAoKGIgPj4gMykgJiAweDEpKSB8ICgoKGEgPj4gMykgJiAweDEpICYgbikgfCAobiAmICgoYiA+PiAzKSAmIDB4MSkpOwoJciB8PSAoKChhID4+IDQpICYgMHgxKSBeICgoYiA+PiA0KSAmIDB4MSkgXiBuKSA8PCA0OwoJbiA9ICgoKGEgPj4gNCkgJiAweDEpICYgKChiID4+IDQpICYgMHgxKSkgfCAoKChhID4+IDQpICYgMHgxKSAmIG4pIHwgKG4gJiAoKGIgPj4gNCkgJiAweDEpKTsKCXIgfD0gKCgoYSA+PiA1KSAmIDB4MSkgXiAoKGIgPj4gNSkgJiAweDEpIF4gbikgPDwgNTsKCW4gPSAoKChhID4+IDUpICYgMHgxKSAmICgoYiA+PiA1KSAmIDB4MSkpIHwgKCgoYSA+PiA1KSAmIDB4MSkgJiBuKSB8IChuICYgKChiID4+IDUpICYgMHgxKSk7CglyIHw9ICgoKGEgPj4gNikgJiAweDEpIF4gKChiID4+IDYpICYgMHgxKSBeIG4pIDw8IDY7CgluID0gKCgoYSA+PiA2KSAmIDB4MSkgJiAoKGIgPj4gNikgJiAweDEpKSB8ICgoKGEgPj4gNikgJiAweDEpICYgbikgfCAobiAmICgoYiA+PiA2KSAmIDB4MSkpOwoJciB8PSAoKChhID4+IDcpICYgMHgxKSBeICgoYiA+PiA3KSAmIDB4MSkgXiBuKSA8PCA3OwoJcmV0dXJuIHI7Cn0KCmNoYXIgc3ViKGNoYXIgYSwgY2hhciBiKQp7CglyZXR1cm4gYWRkKGEsIGFkZCh+YiwgMSkpOwp9CgpjaGFyIGNtcChjaGFyIGEsIGNoYXIgYiwgY2hhciBjKQp7CglyZXR1cm4gKH4oYWRkKH5hZGQoYSwgYiksIGFkZChjLCAxKSkgPj4gNykpICYgMHgxOwp9CgpjaGFyIG1hc2soY2hhciBhKQp7CglyZXR1cm4gKGEgfCBhIDw8IDEgfCBhIDw8IDIgfCBhIDw8IDMgfCBhIDw8IDQgfCBhIDw8IDUgfCBhIDw8IDYgfCBhIDw8IDcpOwp9CgpjaGFyIGRzKGNoYXIgKnN1bSwgY2hhciAqZCwgY2hhciAqciwgY2hhciBhLCBjaGFyIGIpCnsKCWNoYXIgYyA9IGNtcCgqc3VtLCBiLCBhKTsgKmQgPSBhZGQoKmQsIGMpOyAqc3VtID0gYWRkKCpzdW0sIGIgJiBtYXNrKGMpKTsgKnIgPSBzdWIoKnIsIGIgJiBtYXNrKGMpKTsKfQoKY2hhciBkczgoY2hhciAqc3VtLCBjaGFyICpkLCBjaGFyICpyLCBjaGFyIGEsIGNoYXIgYikKewoJZHMoc3VtLCBkLCByLCBhLCBiKTsgZHMoc3VtLCBkLCByLCBhLCBiKTsgZHMoc3VtLCBkLCByLCBhLCBiKTsgZHMoc3VtLCBkLCByLCBhLCBiKTsKCWRzKHN1bSwgZCwgciwgYSwgYik7IGRzKHN1bSwgZCwgciwgYSwgYik7IGRzKHN1bSwgZCwgciwgYSwgYik7IGRzKHN1bSwgZCwgciwgYSwgYik7Cn0KCmNoYXIgZHMxMjgoY2hhciAqc3VtLCBjaGFyICpkLCBjaGFyICpyLCBjaGFyIGEsIGNoYXIgYikKewoJZHM4KHN1bSwgZCwgciwgYSwgYik7IGRzOChzdW0sIGQsIHIsIGEsIGIpOyBkczgoc3VtLCBkLCByLCBhLCBiKTsgZHM4KHN1bSwgZCwgciwgYSwgYik7Cglkczgoc3VtLCBkLCByLCBhLCBiKTsgZHM4KHN1bSwgZCwgciwgYSwgYik7IGRzOChzdW0sIGQsIHIsIGEsIGIpOyBkczgoc3VtLCBkLCByLCBhLCBiKTsKCWRzOChzdW0sIGQsIHIsIGEsIGIpOyBkczgoc3VtLCBkLCByLCBhLCBiKTsgZHM4KHN1bSwgZCwgciwgYSwgYik7IGRzOChzdW0sIGQsIHIsIGEsIGIpOwoJZHM4KHN1bSwgZCwgciwgYSwgYik7IGRzOChzdW0sIGQsIHIsIGEsIGIpOyBkczgoc3VtLCBkLCByLCBhLCBiKTsgZHM4KHN1bSwgZCwgciwgYSwgYik7Cn0KCmNoYXIgZGl2KGNoYXIgYSwgY2hhciBiLCBjaGFyICpyKQp7CgljaGFyIHN1bSA9IDAsIGQgPSAwOwoJKnIgPSBhOwoJZHMxMjgoJnN1bSwgJmQsIHIsIGEsIGIpOyAKCXJldHVybiBkOwp9CgppbnQgbWFpbih2b2lkKSB7CglpbnQgYSwgYjsKCWNoYXIgcmVtaW5kZXIsIGRpdmlzaW9uOwoJc2NhbmYoIiVkIC8gJWQiLCAmYSwgJmIpOwoJZGl2aXNpb24gPSBkaXYoYSwgYiwgJnJlbWluZGVyKTsKCXByaW50ZigiJWQgLyAlZCA9ICVkICglZCkiLCBhLCBiLCBkaXZpc2lvbiwgcmVtaW5kZXIpOwoJcmV0dXJuIDA7Cn0K