#include <stdlib.h>
#include <stdio.h>
#include <time.h>
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;
}
#define testCnt 10*1000*1000
int ma[testCnt], mb[testCnt];
int mc[testCnt], md[testCnt];
int main() {
int i;
for(i = 0; i < testCnt; i++)
ma
[i
] = rand()%10, mb
[i
] = (int)(rand()/(double)RAND_MAX
*100*1000*1000), mc
[i
] = ma
[i
], md
[i
] = mb
[i
];
time_t start_time;
for(i = 0; i < testCnt; ++i)
myConcat(ma[i], mb[i]);
printf("%.3lf\n",(clock()-start_time
)/(double)CLOCKS_PER_SEC
);
for(i = 0; i < testCnt; ++i)
uintcat(mc[i], md[i]);
printf("%.3lf\n",(clock()-start_time
)/(double)CLOCKS_PER_SEC
);
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHRpbWUuaD4KICAgICAKdW5zaWduZWQgaW50IG15Q29uY2F0KHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikgewogICAgc3dpdGNoKCAoYiA+PSAxMDAwMDAwMCkgPyA3IDoKICAgIAkJKGIgPj0gMTAwMDAwMCkgPyA2IDoKICAgIAkJKGIgPj0gMTAwMDAwKSA/IDUgOgogICAgCQkoYiA+PSAxMDAwMCkgPyA0IDoKICAgIAkJKGIgPj0gMTAwMCkgPyAzIDoKICAgIAkJKGIgPj0gMTAwKSA/IDIgOgogICAgCQkoYiA+PSAxMCkgPyAxIDogMCApIHsKICAgIGNhc2UgMTogcmV0dXJuIGEqMTAwK2I7IGJyZWFrOwogICAgY2FzZSAyOiByZXR1cm4gYSoxMDAwK2I7IGJyZWFrOwogICAgY2FzZSAzOiByZXR1cm4gYSoxMDAwMCtiOyBicmVhazsKICAgIGNhc2UgNDogcmV0dXJuIGEqMTAwMDAwK2I7IGJyZWFrOwogICAgY2FzZSA1OiByZXR1cm4gYSoxMDAwMDAwK2I7IGJyZWFrOwogICAgY2FzZSA2OiByZXR1cm4gYSoxMDAwMDAwMCtiOyBicmVhazsKICAgIGNhc2UgNzogcmV0dXJuIGEqMTAwMDAwMDAwK2I7IGJyZWFrOwogICAgZGVmYXVsdDogcmV0dXJuIGEqMTArYjsgYnJlYWs7CiAgICAvLyBJIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdG8gZG8gaGVyZQogICAgLy9jYXNlIDg6IHJldHVybiBhKjEwMDAqMTAwMCoxMDAwK2I7IGJyZWFrOwogICAgLy9jYXNlIDk6IHJldHVybiBhKjEwKjEwMDAqMTAwMCoxMDAwK2I7IGJyZWFrOwogICAgfQp9CiAgICAgCnVuc2lnbmVkIGludCB1aW50Y2F0ICh1bnNpZ25lZCBpbnQgbXMsIHVuc2lnbmVkIGludCBscykgewogICAgdW5zaWduZWQgaW50IG11bHQ7CiAgICBmb3IobXVsdD0xMDsgbXVsdCA8PSBsczsgbXVsdCAqPSAxMCkge30KICAgIHJldHVybiBtcyAqIG11bHQgKyBsczsKfQoKI2RlZmluZSB0ZXN0Q250IDEwKjEwMDAqMTAwMAppbnQgbWFbdGVzdENudF0sIG1iW3Rlc3RDbnRdOwppbnQgbWNbdGVzdENudF0sIG1kW3Rlc3RDbnRdOwogICAgCmludCBtYWluKCkgewogICAgc3JhbmQodGltZSgwKSk7CiAgICAKICAgIGludCBpOyAKICAgIGZvcihpID0gMDsgaSA8IHRlc3RDbnQ7IGkrKykKICAgIAltYVtpXSA9IHJhbmQoKSUxMCwgbWJbaV0gPSAoaW50KShyYW5kKCkvKGRvdWJsZSlSQU5EX01BWCoxMDAqMTAwMCoxMDAwKSwgbWNbaV0gPSBtYVtpXSwgbWRbaV0gPSBtYltpXTsKICAgIAogICAgdGltZV90IHN0YXJ0X3RpbWU7CiAgICBzdGFydF90aW1lID0gY2xvY2soKTsKICAgIGZvcihpID0gMDsgaSA8IHRlc3RDbnQ7ICsraSkKICAgIAlteUNvbmNhdChtYVtpXSwgbWJbaV0pOwogICAgcHJpbnRmKCIlLjNsZlxuIiwoY2xvY2soKS1zdGFydF90aW1lKS8oZG91YmxlKUNMT0NLU19QRVJfU0VDKTsKCglzdGFydF90aW1lID0gY2xvY2soKTsKICAgIGZvcihpID0gMDsgaSA8IHRlc3RDbnQ7ICsraSkKICAgIAl1aW50Y2F0KG1jW2ldLCBtZFtpXSk7CiAgICBwcmludGYoIiUuM2xmXG4iLChjbG9jaygpLXN0YXJ0X3RpbWUpLyhkb3VibGUpQ0xPQ0tTX1BFUl9TRUMpOwogICAgIAogICAgcmV0dXJuIDA7Cn0=