int128 输入输出流控制
int128 只在基于 \(\tt Lumix\) 系统的环境下可用,需要 \(\tt C++20\) 。38位精度,除输入输出外与普通数据类型无差别。该封装支持负数读入,需要注意 write 函数结尾不输出多余空格与换行。
namespace my128 { // 读入优化封装,支持__int128using i64 = __int128_t;i64 abs(const i64 &x) {return x > 0 ? x : -x;}auto &operator>>(istream &it, i64 &j) {string val;it >> val;reverse(val.begin(), val.end());i64 ans = 0;bool f = 0;char c = val.back();val.pop_back();for (; c < '0' || c > '9'; c = val.back(), val.pop_back()) {if (c == '-') {f = 1;}}for (; c >= '0' && c <= '9'; c = val.back(), val.pop_back()) {ans = ans * 10 + c - '0';}j = f ? -ans : ans;return it;}auto &operator<<(ostream &os, const i64 &j) {string ans;function<void(i64)> write = [&](i64 x) {if (x < 0) ans += '-', x = -x;if (x > 9) write(x / 10);ans += x % 10 + '0';};write(j);return os << ans;}
} // namespace my128
