#include <iostream>
#include <vector>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <random>
#include <iomanip>
using namespace std;
unsigned int myConcat(unsigned int& a, unsigned int& b) {
switch( (b >= 10000000) ? 7 :
(b >= 1000000) ? 6 :
(b >= 100000) ? 5 :
(b >= 10000) ? 4 :
(b >= 1000) ? 3 :
(b >= 100) ? 2 :
(b >= 10) ? 1 : 0 ) {
case 1: return a*100+b; break;
case 2: return a*1000+b; break;
case 3: return a*10000+b; break;
case 4: return a*100000+b; break;
case 5: return a*1000000+b; break;
case 6: return a*10000000+b; break;
case 7: return a*100000000+b; break;
default: return a*10+b; break;
// I don't really know what to do here
//case 8: return a*1000*1000*1000+b; break;
//case 9: return a*10*1000*1000*1000+b; break;
}
}
unsigned int uintcat (unsigned int& ms, unsigned int& ls) {
unsigned int mult;
for(mult=10; mult <= ls; mult *= 10) {}
return ms * mult + ls;
}
int main() {
default_random_engine generator;
uniform_int_distribution<unsigned int> distrA(0,9),distrB(0,100*1000*1000);
int i;
int testCnt = 10*1000*1000;
time_t start_time;
cout << setprecision(3) << fixed;
vector<unsigned int> a(testCnt), b(testCnt);
for(i = 0; i < testCnt; i++)
a[i] = distrA(generator), b[i] = distrB(generator);
start_time = clock();
for(i = 0; i < testCnt; ++i)
myConcat(a[i], b[i]);
cout << (clock()-start_time)/double(CLOCKS_PER_SEC) << "\n";
// use separate vectors to overcome memory hashing, but data is the same
vector<unsigned int> c(a.begin(), a.end()), d(b.begin(), b.end());
start_time = clock();
for(i = 0; i < testCnt; ++i)
uintcat(c[i], d[i]);
cout << (clock()-start_time)/double(CLOCKS_PER_SEC) << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGlvbWFuaXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1bnNpZ25lZCBpbnQgbXlDb25jYXQodW5zaWduZWQgaW50JiBhLCB1bnNpZ25lZCBpbnQmIGIpIHsKCXN3aXRjaCggKGIgPj0gMTAwMDAwMDApID8gNyA6IAoJCQkoYiA+PSAxMDAwMDAwKSA/IDYgOiAKCQkJKGIgPj0gMTAwMDAwKSA/IDUgOiAKCQkJKGIgPj0gMTAwMDApID8gNCA6IAoJCQkoYiA+PSAxMDAwKSA/IDMgOiAKCQkJKGIgPj0gMTAwKSA/IDIgOiAKCQkJKGIgPj0gMTApID8gMSA6IDAgKSB7CgkJY2FzZSAxOiByZXR1cm4gYSoxMDArYjsgYnJlYWs7CiAgICAJY2FzZSAyOiByZXR1cm4gYSoxMDAwK2I7IGJyZWFrOwogICAgCWNhc2UgMzogcmV0dXJuIGEqMTAwMDArYjsgYnJlYWs7CiAgICAJY2FzZSA0OiByZXR1cm4gYSoxMDAwMDArYjsgYnJlYWs7CiAgICAJY2FzZSA1OiByZXR1cm4gYSoxMDAwMDAwK2I7IGJyZWFrOwogICAgCWNhc2UgNjogcmV0dXJuIGEqMTAwMDAwMDArYjsgYnJlYWs7CiAgICAJY2FzZSA3OiByZXR1cm4gYSoxMDAwMDAwMDArYjsgYnJlYWs7CiAgICAJZGVmYXVsdDogcmV0dXJuIGEqMTArYjsgYnJlYWs7CiAgICAJLy8gSSBkb24ndCByZWFsbHkga25vdyB3aGF0IHRvIGRvIGhlcmUKICAgIAkvL2Nhc2UgODogcmV0dXJuIGEqMTAwMCoxMDAwKjEwMDArYjsgYnJlYWs7CiAgICAJLy9jYXNlIDk6IHJldHVybiBhKjEwKjEwMDAqMTAwMCoxMDAwK2I7IGJyZWFrOwoJfQp9Cgp1bnNpZ25lZCBpbnQgdWludGNhdCAodW5zaWduZWQgaW50JiBtcywgdW5zaWduZWQgaW50JiBscykgewoJdW5zaWduZWQgaW50IG11bHQ7Cglmb3IobXVsdD0xMDsgbXVsdCA8PSBsczsgbXVsdCAqPSAxMCkge30KCXJldHVybiBtcyAqIG11bHQgKyBsczsKfQoKaW50IG1haW4oKSB7CglkZWZhdWx0X3JhbmRvbV9lbmdpbmUgZ2VuZXJhdG9yOwogIAl1bmlmb3JtX2ludF9kaXN0cmlidXRpb248dW5zaWduZWQgaW50PiBkaXN0ckEoMCw5KSxkaXN0ckIoMCwxMDAqMTAwMCoxMDAwKTsKICAJaW50IGk7CiAgCQogIAlpbnQgdGVzdENudCA9IDEwKjEwMDAqMTAwMDsKICAJdGltZV90IHN0YXJ0X3RpbWU7Cgljb3V0IDw8IHNldHByZWNpc2lvbigzKSA8PCBmaXhlZDsKICAJCiAgCXZlY3Rvcjx1bnNpZ25lZCBpbnQ+IGEodGVzdENudCksIGIodGVzdENudCk7CiAgCWZvcihpID0gMDsgaSA8IHRlc3RDbnQ7IGkrKykKCQlhW2ldID0gZGlzdHJBKGdlbmVyYXRvciksIGJbaV0gPSBkaXN0ckIoZ2VuZXJhdG9yKTsKCQoJc3RhcnRfdGltZSA9IGNsb2NrKCk7Cglmb3IoaSA9IDA7IGkgPCB0ZXN0Q250OyArK2kpCgkJbXlDb25jYXQoYVtpXSwgYltpXSk7Cgljb3V0IDw8IChjbG9jaygpLXN0YXJ0X3RpbWUpL2RvdWJsZShDTE9DS1NfUEVSX1NFQykgPDwgIlxuIjsKCQkKCS8vIHVzZSBzZXBhcmF0ZSB2ZWN0b3JzIHRvIG92ZXJjb21lIG1lbW9yeSBoYXNoaW5nLCBidXQgZGF0YSBpcyB0aGUgc2FtZQoJdmVjdG9yPHVuc2lnbmVkIGludD4gYyhhLmJlZ2luKCksIGEuZW5kKCkpLCBkKGIuYmVnaW4oKSwgYi5lbmQoKSk7CglzdGFydF90aW1lID0gY2xvY2soKTsKCWZvcihpID0gMDsgaSA8IHRlc3RDbnQ7ICsraSkKCQl1aW50Y2F0KGNbaV0sIGRbaV0pOwoJY291dCA8PCAoY2xvY2soKS1zdGFydF90aW1lKS9kb3VibGUoQ0xPQ0tTX1BFUl9TRUMpIDw8ICJcbiI7CgkKCXJldHVybiAwOwp9