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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | #include <string> std::string& itostr(int n, std::string& s) { if(n==0) { s="0"; return s; } int sign = -(n<0); unsigned int val = (n^sign)-sign; int size; if(val>=10000) { if(val>=10000000) { if(val>=1000000000) size=10; else if(val>=100000000) size=9; else size=8; } else { if(val>=1000000) size=7; else if(val>=100000) size=6; else size=5; } } else { if(val>=100) { if(val>=1000) size=4; else size=3; } else { if(val>=10) size=2; else size=1; } } s.resize(-sign+size); char* c = &s[0]; if(sign) *c++='-'; char* d = c+size-1; while(val>0) { *d--='0' + (val % 10); val /= 10; } return s; } std::string& itostr(unsigned val, std::string& s) { if(val==0) { s="0"; return s; } int size; if(val>=10000) { if(val>=10000000) { if(val>=1000000000) size=10; else if(val>=100000000) size=9; else size=8; } else { if(val>=1000000) size=7; else if(val>=100000) size=6; else size=5; } } else { if(val>=100) { if(val>=1000) size=4; else size=3; } else { if(val>=10) size=2; else size=1; } } s.resize(size); char* c = &s[0]; char* d = c+size-1; while(val>0) { *d--='0' + (val % 10); val /= 10; } return s; } #include <iostream> #include <climits> int main(void) { std::string s; int j; for(j=10; j<1e9; j*=-3) { itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); } j = INT_MIN; itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); j = INT_MAX; itostr(j, s); printf("%d '%s' %d\n", j, s.c_str(), s.size()); int i = 0; i += itostr(INT_MIN, s).size(); i += itostr(INT_MAX, s).size(); i += itostr(unsigned(INT_MAX) + 1U, s).size(); i += itostr(unsigned(~0), s).size(); char c = CHAR_MIN; do { i += itostr(c, s).size(); i += itostr((11111111 * c), s).size(); if (c >= CHAR_MAX) break; c++; } while (1); while (i < 500000000) i += itostr(i, s).size(); std::cout << i << std::endl; return i; } |
I2luY2x1ZGUgPHN0cmluZz4KCnN0ZDo6c3RyaW5nJiBpdG9zdHIoaW50IG4sIHN0ZDo6c3RyaW5nJiBzKQp7CiAgICBpZihuPT0wKQogICAgewogICAgICAgIHM9IjAiOwogICAgICAgIHJldHVybiBzOwogICAgfQogCiAgICBpbnQgc2lnbiA9IC0objwwKTsKICAgIHVuc2lnbmVkIGludCB2YWwgPSAobl5zaWduKS1zaWduOwoKICAgIGludCBzaXplOwogICAgaWYodmFsPj0xMDAwMCkKICAgIHsKICAgICAgICBpZih2YWw+PTEwMDAwMDAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMDAwMDAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT0xMDsKICAgICAgICAgICAgZWxzZSBpZih2YWw+PTEwMDAwMDAwMCkKICAgICAgICAgICAgICAgIHNpemU9OTsKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgIHNpemU9ODsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMDAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT03OwogICAgICAgICAgICBlbHNlIGlmKHZhbD49MTAwMDAwKQogICAgICAgICAgICAgICAgc2l6ZT02OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaXplPTU7CiAgICAgICAgfQogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICBpZih2YWw+PTEwMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHZhbD49MTAwMCkKICAgICAgICAgICAgICAgIHNpemU9NDsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2l6ZT0zOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZih2YWw+PTEwKQogICAgICAgICAgICAgICAgc2l6ZT0yOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaXplPTE7CiAgICAgICAgfQogICAgfQoKICAgIHMucmVzaXplKC1zaWduK3NpemUpOwogICAgY2hhciogYyA9ICZzWzBdOwogICAgaWYoc2lnbikKICAgICAgICAqYysrPSctJzsKCiAgICBjaGFyKiBkID0gYytzaXplLTE7CiAgICB3aGlsZSh2YWw+MCkKICAgIHsKICAgICAgICAqZC0tPScwJyArICh2YWwgJSAxMCk7CiAgICAgICAgdmFsIC89IDEwOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnN0ZDo6c3RyaW5nJiBpdG9zdHIodW5zaWduZWQgdmFsLCBzdGQ6OnN0cmluZyYgcykKewogICAgaWYodmFsPT0wKQogICAgewogICAgICAgIHM9IjAiOwogICAgICAgIHJldHVybiBzOwogICAgfQogCiAgICBpbnQgc2l6ZTsKICAgIGlmKHZhbD49MTAwMDApCiAgICB7CiAgICAgICAgaWYodmFsPj0xMDAwMDAwMCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHZhbD49MTAwMDAwMDAwMCkKICAgICAgICAgICAgICAgIHNpemU9MTA7CiAgICAgICAgICAgIGVsc2UgaWYodmFsPj0xMDAwMDAwMDApCiAgICAgICAgICAgICAgICBzaXplPTk7CiAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICBzaXplPTg7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmKHZhbD49MTAwMDAwMCkKICAgICAgICAgICAgICAgIHNpemU9NzsKICAgICAgICAgICAgZWxzZSBpZih2YWw+PTEwMDAwMCkKICAgICAgICAgICAgICAgIHNpemU9NjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2l6ZT01OwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgICAgaWYodmFsPj0xMDApCiAgICAgICAgewogICAgICAgICAgICBpZih2YWw+PTEwMDApCiAgICAgICAgICAgICAgICBzaXplPTQ7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNpemU9MzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYodmFsPj0xMCkKICAgICAgICAgICAgICAgIHNpemU9MjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2l6ZT0xOwogICAgICAgIH0KICAgIH0KCiAgICBzLnJlc2l6ZShzaXplKTsKICAgIGNoYXIqIGMgPSAmc1swXTsKICAgIGNoYXIqIGQgPSBjK3NpemUtMTsKICAgIHdoaWxlKHZhbD4wKQogICAgewogICAgICAgICpkLS09JzAnICsgKHZhbCAlIDEwKTsKICAgICAgICB2YWwgLz0gMTA7CiAgICB9CiAgICByZXR1cm4gczsKfQoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2xpbWl0cz4KaW50IG1haW4odm9pZCkKewogICAgICAgIHN0ZDo6c3RyaW5nIHM7CglpbnQgajsKCWZvcihqPTEwOyBqPDFlOTsgaio9LTMpCgl7CgkJaXRvc3RyKGosIHMpOwoJCXByaW50ZigiJWQgJyVzJyAlZFxuIiwgaiwgcy5jX3N0cigpLCBzLnNpemUoKSk7Cgl9CglqID0gSU5UX01JTjsKCWl0b3N0cihqLCBzKTsKCXByaW50ZigiJWQgJyVzJyAlZFxuIiwgaiwgcy5jX3N0cigpLCBzLnNpemUoKSk7CglqID0gSU5UX01BWDsKCWl0b3N0cihqLCBzKTsKCXByaW50ZigiJWQgJyVzJyAlZFxuIiwgaiwgcy5jX3N0cigpLCBzLnNpemUoKSk7CgogICAgaW50IGkgPSAwOwogICAgaSArPSBpdG9zdHIoSU5UX01JTiwgcykuc2l6ZSgpOwogICAgaSArPSBpdG9zdHIoSU5UX01BWCwgcykuc2l6ZSgpOwoKICAgIGkgKz0gaXRvc3RyKHVuc2lnbmVkKElOVF9NQVgpICsgMVUsIHMpLnNpemUoKTsKICAgIGkgKz0gaXRvc3RyKHVuc2lnbmVkKH4wKSwgcykuc2l6ZSgpOyAKCgljaGFyIGMgPSBDSEFSX01JTjsKCWRvIHsKCQlpICs9IGl0b3N0cihjLCBzKS5zaXplKCk7CiAgICAgICAgICAgICAgICBpICs9IGl0b3N0cigoMTExMTExMTEgKiBjKSwgcykuc2l6ZSgpOwoKICAgICAgICAgICAgICAgIGlmIChjID49IENIQVJfTUFYKSBicmVhazsKCgkJYysrOwoJfSB3aGlsZSAoMSk7CgogICAgd2hpbGUgKGkgPCA1MDAwMDAwMDApCiAgICAgICAgaSArPSBpdG9zdHIoaSwgcykuc2l6ZSgpOwoKICAgIHN0ZDo6Y291dCA8PCBpIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gaTsKfQ==
-
upload with new input
-
result: Success time: 2.54s memory: 2860 kB returned value: 1
10 '10' 2 -30 '-30' 3 90 '90' 2 -270 '-270' 4 810 '810' 3 -2430 '-2430' 5 7290 '7290' 4 -21870 '-21870' 6 65610 '65610' 5 -196830 '-196830' 7 590490 '590490' 6 -1771470 '-1771470' 8 5314410 '5314410' 7 -15943230 '-15943230' 9 47829690 '47829690' 8 -143489070 '-143489070' 10 430467210 '430467210' 9 -1291401630 '-1291401630' 11 -420762406 '-420762406' 10 -2147483648 '-2147483648' 11 2147483647 '2147483647' 10 500000001


