1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <string> #include <limits.h> #include <memory.h> const char digit_pairs[201] = { "00010203040506070809" "10111213141516171819" "20212223242526272829" "30313233343536373839" "40414243444546474849" "50515253545556575859" "60616263646566676869" "70717273747576777879" "80818283848586878889" "90919293949596979899" }; static const int BUFFER_SIZE = 11; std::string itostr(int val) { char buf[BUFFER_SIZE]; char *it = &buf[BUFFER_SIZE-2]; if(val>=0) { int div = val/100; while(div) { memcpy(it,&digit_pairs[2*(val-div*100)],2); val = div; it-=2; div = val/100; } memcpy(it,&digit_pairs[2*val],2); if(val<10) it++; } else { int div = val/100; while(div) { memcpy(it,&digit_pairs[-2*(val-div*100)],2); val = div; it-=2; div = val/100; } memcpy(it,&digit_pairs[-2*val],2); if(val<=-10) it--; *it = '-'; } return std::string(it,&buf[BUFFER_SIZE]-it); } std::string itostr(unsigned int val) { char buf[BUFFER_SIZE]; char *it = (char*)&buf[BUFFER_SIZE-2]; int div = val/100; while(div) { memcpy(it,&digit_pairs[2*(val-div*100)],2); val = div; it-=2; div = val/100; } memcpy(it,&digit_pairs[2*val],2); if(val<10) it++; return std::string((char*)it,(char*)&buf[BUFFER_SIZE]-(char*)it); } #include <iostream> int main(void) { int i = 0; i += itostr(INT_MIN).size(); i += itostr(INT_MAX).size(); i += itostr(unsigned(INT_MAX) + 1U).size(); i += itostr(unsigned(~0)).size(); char c = CHAR_MIN; do { i += itostr(c).size(); i += itostr((11111111 * c)).size(); if (c >= CHAR_MAX) break; c++; } while (1); while (i < 100000000) i += itostr(i).size(); std::cout << i << std::endl; return i; } |
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8bWVtb3J5Lmg+Cgpjb25zdCBjaGFyIGRpZ2l0X3BhaXJzWzIwMV0gPSB7CiAgIjAwMDEwMjAzMDQwNTA2MDcwODA5IgogICIxMDExMTIxMzE0MTUxNjE3MTgxOSIKICAiMjAyMTIyMjMyNDI1MjYyNzI4MjkiCiAgIjMwMzEzMjMzMzQzNTM2MzczODM5IgogICI0MDQxNDI0MzQ0NDU0NjQ3NDg0OSIKICAiNTA1MTUyNTM1NDU1NTY1NzU4NTkiCiAgIjYwNjE2MjYzNjQ2NTY2Njc2ODY5IgogICI3MDcxNzI3Mzc0NzU3Njc3Nzg3OSIKICAiODA4MTgyODM4NDg1ODY4Nzg4ODkiCiAgIjkwOTE5MjkzOTQ5NTk2OTc5ODk5Igp9OwoKc3RhdGljIGNvbnN0IGludCBCVUZGRVJfU0laRSA9IDExOwoKc3RkOjpzdHJpbmcgaXRvc3RyKGludCB2YWwpCnsKICBjaGFyIGJ1ZltCVUZGRVJfU0laRV07CiAgY2hhciAqaXQgPSAmYnVmW0JVRkZFUl9TSVpFLTJdOwoKICBpZih2YWw+PTApIHsKICAgIGludCBkaXYgPSB2YWwvMTAwOwogICAgd2hpbGUoZGl2KSB7CiAgICAgIG1lbWNweShpdCwmZGlnaXRfcGFpcnNbMioodmFsLWRpdioxMDApXSwyKTsKICAgICAgdmFsID0gZGl2OwogICAgICBpdC09MjsKICAgICAgZGl2ID0gdmFsLzEwMDsKICAgIH0KICAgIG1lbWNweShpdCwmZGlnaXRfcGFpcnNbMip2YWxdLDIpOwogICAgaWYodmFsPDEwKQogICAgICBpdCsrOwogIH0gZWxzZSB7CiAgICBpbnQgZGl2ID0gdmFsLzEwMDsKICAgIHdoaWxlKGRpdikgewogICAgICBtZW1jcHkoaXQsJmRpZ2l0X3BhaXJzWy0yKih2YWwtZGl2KjEwMCldLDIpOwogICAgICB2YWwgPSBkaXY7CiAgICAgIGl0LT0yOwogICAgICBkaXYgPSB2YWwvMTAwOwogICAgfQogICAgbWVtY3B5KGl0LCZkaWdpdF9wYWlyc1stMip2YWxdLDIpOwogICAgaWYodmFsPD0tMTApCiAgICAgIGl0LS07CiAgICAqaXQgPSAnLSc7CiAgfQoKICByZXR1cm4gc3RkOjpzdHJpbmcoaXQsJmJ1ZltCVUZGRVJfU0laRV0taXQpOwp9CgpzdGQ6OnN0cmluZyBpdG9zdHIodW5zaWduZWQgaW50IHZhbCkKewogIGNoYXIgYnVmW0JVRkZFUl9TSVpFXTsKICBjaGFyICppdCA9IChjaGFyKikmYnVmW0JVRkZFUl9TSVpFLTJdOwoKICBpbnQgZGl2ID0gdmFsLzEwMDsKICB3aGlsZShkaXYpIHsKICAgIG1lbWNweShpdCwmZGlnaXRfcGFpcnNbMioodmFsLWRpdioxMDApXSwyKTsKICAgIHZhbCA9IGRpdjsKICAgIGl0LT0yOwogICAgZGl2ID0gdmFsLzEwMDsKICB9CiAgbWVtY3B5KGl0LCZkaWdpdF9wYWlyc1syKnZhbF0sMik7CiAgaWYodmFsPDEwKQogICAgaXQrKzsKCiAgcmV0dXJuIHN0ZDo6c3RyaW5nKChjaGFyKilpdCwoY2hhciopJmJ1ZltCVUZGRVJfU0laRV0tKGNoYXIqKWl0KTsKfQoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4odm9pZCkKewogICAgaW50IGkgPSAwOwogICAgaSArPSBpdG9zdHIoSU5UX01JTikuc2l6ZSgpOwogICAgaSArPSBpdG9zdHIoSU5UX01BWCkuc2l6ZSgpOwoKICAgIGkgKz0gaXRvc3RyKHVuc2lnbmVkKElOVF9NQVgpICsgMVUpLnNpemUoKTsKICAgIGkgKz0gaXRvc3RyKHVuc2lnbmVkKH4wKSkuc2l6ZSgpOyAKCiAgICBjaGFyIGMgPSBDSEFSX01JTjsKICAgIGRvIHsKICAgICAgICBpICs9IGl0b3N0cihjKS5zaXplKCk7CiAgICAgICAgICAgICAgICBpICs9IGl0b3N0cigoMTExMTExMTEgKiBjKSkuc2l6ZSgpOwoKICAgICAgICAgICAgICAgIGlmIChjID49IENIQVJfTUFYKSBicmVhazsKCiAgICAgICAgYysrOwogICAgfSB3aGlsZSAoMSk7CgogICAgd2hpbGUgKGkgPCAxMDAwMDAwMDApCiAgICAgICAgaSArPSBpdG9zdHIoaSkuc2l6ZSgpOwoKICAgIHN0ZDo6Y291dCA8PCBpIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gaTsKfQ==
-
upload with new input
-
result: Success time: 1.71s memory: 2860 kB returned value: 5
100000005


