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 | struct itostr_helper { static unsigned out[10000]; itostr_helper() { for (int i = 0; i < 10000; i++) { unsigned v = i; char * o = (char*)(out + i); o[3] = v % 10 + '0'; o[2] = (v % 100) / 10 + '0'; o[1] = (v % 1000) / 100 + '0'; o[0] = (v % 10000) / 1000; if (o[0]) o[0] |= 0x30; else if (o[1] != '0') o[0] |= 0x20; else if (o[2] != '0') o[0] |= 0x10; else o[0] |= 0x00; } } }; unsigned itostr_helper::out[10000]; itostr_helper hlp_init; template <typename T> std::string itostr(T o) { typedef itostr_helper hlp; unsigned blocks[3], *b = blocks + 2; blocks[0] = o < 0 ? ~o + 1 : o; blocks[2] = blocks[0] % 10000; blocks[0] /= 10000; blocks[2] = hlp::out[blocks[2]]; if (blocks[0]) { blocks[1] = blocks[0] % 10000; blocks[0] /= 10000; blocks[1] = hlp::out[blocks[1]]; blocks[2] |= 0x30303030; b--; } if (blocks[0]) { blocks[0] = hlp::out[blocks[0] % 10000]; blocks[1] |= 0x30303030; b--; } char* f = ((char*)b); f += 3 - (*f >> 4); char* str = (char*)blocks; if (o < 0) *--f = '-'; return std::string(f, (str + 12) - f); } |
CnN0cnVjdCBpdG9zdHJfaGVscGVyIHsKICAgIHN0YXRpYyB1bnNpZ25lZCBvdXRbMTAwMDBdOwoKICAgIGl0b3N0cl9oZWxwZXIoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CiAgICAgICAgICAgIHVuc2lnbmVkIHYgPSBpOwogICAgICAgICAgICBjaGFyICogbyA9IChjaGFyKikob3V0ICsgaSk7CiAgICAgICAgICAgIG9bM10gPSB2ICUgMTAgKyAnMCc7CiAgICAgICAgICAgIG9bMl0gPSAodiAlIDEwMCkgLyAxMCArICcwJzsKICAgICAgICAgICAgb1sxXSA9ICh2ICUgMTAwMCkgLyAxMDAgKyAnMCc7CiAgICAgICAgICAgIG9bMF0gPSAodiAlIDEwMDAwKSAvIDEwMDA7CiAgICAgICAgICAgIGlmIChvWzBdKSBvWzBdIHw9IDB4MzA7CiAgICAgICAgICAgIGVsc2UgaWYgKG9bMV0gIT0gJzAnKSBvWzBdIHw9IDB4MjA7CiAgICAgICAgICAgIGVsc2UgaWYgKG9bMl0gIT0gJzAnKSBvWzBdIHw9IDB4MTA7CiAgICAgICAgICAgIGVsc2Ugb1swXSB8PSAweDAwOwogICAgICAgIH0KICAgIH0KfTsKdW5zaWduZWQgaXRvc3RyX2hlbHBlcjo6b3V0WzEwMDAwXTsKCml0b3N0cl9oZWxwZXIgaGxwX2luaXQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RkOjpzdHJpbmcgaXRvc3RyKFQgbykgewogICAgdHlwZWRlZiBpdG9zdHJfaGVscGVyIGhscDsKCiAgICB1bnNpZ25lZCBibG9ja3NbM10sICpiID0gYmxvY2tzICsgMjsKICAgIGJsb2Nrc1swXSA9IG8gPCAwID8gfm8gKyAxIDogbzsKICAgIGJsb2Nrc1syXSA9IGJsb2Nrc1swXSAlIDEwMDAwOyBibG9ja3NbMF0gLz0gMTAwMDA7CiAgICBibG9ja3NbMl0gPSBobHA6Om91dFtibG9ja3NbMl1dOwoKICAgIGlmIChibG9ja3NbMF0pIHsKICAgICAgICBibG9ja3NbMV0gPSBibG9ja3NbMF0gJSAxMDAwMDsgYmxvY2tzWzBdIC89IDEwMDAwOwogICAgICAgIGJsb2Nrc1sxXSA9IGhscDo6b3V0W2Jsb2Nrc1sxXV07CiAgICAgICAgYmxvY2tzWzJdIHw9IDB4MzAzMDMwMzA7CiAgICAgICAgYi0tOwogICAgfQoKICAgIGlmIChibG9ja3NbMF0pIHsKICAgICAgICBibG9ja3NbMF0gPSBobHA6Om91dFtibG9ja3NbMF0gJSAxMDAwMF07CiAgICAgICAgYmxvY2tzWzFdIHw9IDB4MzAzMDMwMzA7CiAgICAgICAgYi0tOwogICAgfQoKICAgIGNoYXIqIGYgPSAoKGNoYXIqKWIpOwogICAgZiArPSAzIC0gKCpmID4+IDQpOwoKICAgIGNoYXIqIHN0ciA9IChjaGFyKilibG9ja3M7CiAgICBpZiAobyA8IDApICotLWYgPSAnLSc7CiAgICByZXR1cm4gc3RkOjpzdHJpbmcoZiwgKHN0ciArIDEyKSAtIGYpOwp9Cg==


