#include <functional>
#include <iomanip>
#include <iostream>
#include <vector>
#include <typeinfo>
#include <cstdlib>
using namespace std;
unsigned int myAdd(unsigned int a, unsigned int b)
{
unsigned int carry = a & b;
unsigned int result = a ^ b;
while(carry != 0)
{
unsigned int shiftedcarry = carry << 1;
carry = result & shiftedcarry;
result ^= shiftedcarry;
}
return result;
}
int main()
{
cout << "30000 + 1337 = " << myAdd(30000,1337) << endl;
srand(time(0));
for(unsigned i(0); i < 200000; i++){
unsigned temp = rand();
if(i + temp != myAdd(i,temp)) cout << "nie zgadza sie dla wartosci " << i << " + " << temp << endl;
}
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDx0eXBlaW5mbz4KCiNpbmNsdWRlIDxjc3RkbGliPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGludCBteUFkZCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCnsKICAgIHVuc2lnbmVkIGludCBjYXJyeSA9IGEgJiBiOwogICAgdW5zaWduZWQgaW50IHJlc3VsdCA9IGEgXiBiOwogICAgd2hpbGUoY2FycnkgIT0gMCkKICAgIHsKICAgICAgICB1bnNpZ25lZCBpbnQgc2hpZnRlZGNhcnJ5ID0gY2FycnkgPDwgMTsKICAgICAgICBjYXJyeSA9IHJlc3VsdCAmIHNoaWZ0ZWRjYXJyeTsKICAgICAgICByZXN1bHQgXj0gc2hpZnRlZGNhcnJ5OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7Cgljb3V0IDw8ICIzMDAwMCArIDEzMzcgPSAiIDw8IG15QWRkKDMwMDAwLDEzMzcpIDw8IGVuZGw7CgkKCXNyYW5kKHRpbWUoMCkpOwoJCglmb3IodW5zaWduZWQgaSgwKTsgaSA8IDIwMDAwMDsgaSsrKXsKCQl1bnNpZ25lZCB0ZW1wID0gcmFuZCgpOwoJCWlmKGkgKyB0ZW1wICE9IG15QWRkKGksdGVtcCkpIGNvdXQgPDwgIm5pZSB6Z2FkemEgc2llIGRsYSB3YXJ0b3NjaSAiIDw8IGkgPDwgIiArICIgPDwgdGVtcCA8PCBlbmRsOwoJfQp9