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 100 101 | #include <climits> #include <string> #include <stdio.h> typedef unsigned buf_t; static buf_t * reduce(unsigned val, buf_t * stp) { unsigned above = val / 10000; if (above != 0) { stp = reduce(above, stp); val -= above * 10000; } buf_t digit = val / 1000; *stp++ = digit + '0'; val -= digit * 1000; digit = val / 100; *stp++ = digit + '0'; val -= digit * 100; digit = val / 10; *stp++ = digit + '0'; val -= digit * 10; *stp++ = val + '0'; return stp; } std::string itostr(int input) { buf_t buf[16]; if(input == INT_MIN) return std::string("-2147483648"); // handle negative unsigned val = input; if(input < 0) val = -input; buf[0] = '0'; buf_t* endp = reduce(val, buf+1); *endp = 127; buf_t * stp = buf+1; while (*stp == '0') stp++; if (stp == endp) stp--; if (input < 0) { stp--; *stp = '-'; } return std::string(stp, endp); } std::string itostr(unsigned input) { buf_t buf[16]; unsigned val = input; buf_t* endp = reduce(val, buf); *endp = 127; buf_t * stp = buf; while (*stp == '0') stp++; if (stp == endp) stp--; return std::string(stp, endp); } 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(); printf("%d\n", i); return i; } |
I2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxzdGRpby5oPgoKdHlwZWRlZiB1bnNpZ25lZCBidWZfdDsgCgpzdGF0aWMgYnVmX3QgKiByZWR1Y2UodW5zaWduZWQgdmFsLCBidWZfdCAqIHN0cCkgewogICB1bnNpZ25lZCBhYm92ZSA9IHZhbCAvIDEwMDAwOyAKICAgaWYgKGFib3ZlICE9IDApIHsKICAgICAgc3RwID0gcmVkdWNlKGFib3ZlLCBzdHApOyAKICAgICAgdmFsIC09IGFib3ZlICogMTAwMDA7IAogICB9CgogICBidWZfdCBkaWdpdCAgPSB2YWwgLyAxMDAwOyAKICAgKnN0cCsrID0gZGlnaXQgKyAnMCc7IAogICB2YWwgLT0gZGlnaXQgKiAxMDAwOyAKCiAgIGRpZ2l0ICA9IHZhbCAvIDEwMDsgCiAgICpzdHArKyA9IGRpZ2l0ICsgJzAnOyAKICAgdmFsIC09IGRpZ2l0ICogMTAwOyAKCiAgIGRpZ2l0ICA9IHZhbCAvIDEwOyAKICAgKnN0cCsrID0gZGlnaXQgKyAnMCc7IAogICB2YWwgLT0gZGlnaXQgKiAxMDsgCiAgICpzdHArKyA9IHZhbCArICcwJzsgCiAgIHJldHVybiBzdHA7IAp9CgpzdGQ6OnN0cmluZyBpdG9zdHIoaW50IGlucHV0KSB7CgogICBidWZfdCBidWZbMTZdOyAKCiAgIGlmKGlucHV0ID09IElOVF9NSU4pIAogICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIi0yMTQ3NDgzNjQ4Iik7ICAKCiAgIC8vIGhhbmRsZSBuZWdhdGl2ZQogICB1bnNpZ25lZCB2YWwgPSBpbnB1dDsKICAgaWYoaW5wdXQgPCAwKSAKICAgICAgdmFsID0gLWlucHV0OwoKICAgYnVmWzBdID0gJzAnOyAKICAgYnVmX3QqIGVuZHAgPSByZWR1Y2UodmFsLCBidWYrMSk7IAogICAqZW5kcCA9IDEyNzsgCgogICBidWZfdCAqIHN0cCA9IGJ1ZisxOyAKICAgd2hpbGUgKCpzdHAgPT0gJzAnKSAKICAgICAgc3RwKys7CiAgIGlmIChzdHAgPT0gZW5kcCkKICAgICAgc3RwLS07IAoKICAgaWYgKGlucHV0IDwgMCkgeyAKICAgICAgc3RwLS07IAogICAgICAqc3RwID0gJy0nOyAKICAgfQogICByZXR1cm4gc3RkOjpzdHJpbmcoc3RwLCBlbmRwKTsgCn0KCnN0ZDo6c3RyaW5nIGl0b3N0cih1bnNpZ25lZCBpbnB1dCkgewoKICAgYnVmX3QgYnVmWzE2XTsgCgogICB1bnNpZ25lZCB2YWwgPSBpbnB1dDsKICAgYnVmX3QqIGVuZHAgPSByZWR1Y2UodmFsLCBidWYpOyAKICAgKmVuZHAgPSAxMjc7IAoKICAgYnVmX3QgKiBzdHAgPSBidWY7IAogICB3aGlsZSAoKnN0cCA9PSAnMCcpIAogICAgICBzdHArKzsKICAgaWYgKHN0cCA9PSBlbmRwKQogICAgICBzdHAtLTsgCgogICByZXR1cm4gc3RkOjpzdHJpbmcoc3RwLCBlbmRwKTsgCn0KCgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgaSA9IDA7CiAgICBpICs9IGl0b3N0cihJTlRfTUlOKS5zaXplKCk7CiAgICBpICs9IGl0b3N0cihJTlRfTUFYKS5zaXplKCk7CgogICAgaSArPSBpdG9zdHIodW5zaWduZWQoSU5UX01BWCkgKyAxVSkuc2l6ZSgpOwogICAgaSArPSBpdG9zdHIodW5zaWduZWQofjApKS5zaXplKCk7IAoKCWNoYXIgYyA9IENIQVJfTUlOOwoJZG8gewoJCWkgKz0gaXRvc3RyKGMpLnNpemUoKTsKICAgICAgICAgICAgICAgIGkgKz0gaXRvc3RyKCgxMTExMTExMSAqIGMpKS5zaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKGMgPj0gQ0hBUl9NQVgpIGJyZWFrOwoKCQljKys7Cgl9IHdoaWxlICgxKTsKCiAgICB3aGlsZSAoaSA8IDEwMDAwMDAwMCkKICAgICAgICBpICs9IGl0b3N0cihpKS5zaXplKCk7CgogICAgcHJpbnRmKCIlZFxuIiwgaSk7CgogICAgcmV0dXJuIGk7Cn0=
-
upload with new input
-
result: Success time: 1.8s memory: 2856 kB returned value: 5
100000005


