__int128使用及分析
原本__int128必须使用快读与快写函数来输出,
现在通过输入输出流使__int128可以直接使用cin和cout输入输出。
#include<bits/stdc++.h>
using i128= __int128;
std::istream&operator>>(std::istream &is,i128 &n){
std::string s;is>>s;
n=0;
for(char i:s) n=n*10+i-'0';
return is;
}
std::ostream &operator<<(std::ostream &os,i128 n){
std::string s;
while(n){
s+='0'+n%10;
n/=10;
}
std::reverse(s.begin(),s.end());
return os<<s;
}
main(){
i128 a,b,c;
std::cin>>a>>b;
c=a+b;
std::cout<<c<<"\n";
return 0;
}
输出函数的解释:
- 定义了一个输出流操作符重载函数。
- 在函数内部:
- 创建一个空字符串
s
。 - 通过一个循环,不断从
n
中取出末位数字,并转换为字符添加到s
中,同时将n
除以 10 以逐步处理更高位数字。 - 最后对
s
进行反转,使得数字的顺序是正确的。 - 然后将处理后的字符串通过输出流输出。
- 创建一个空字符串
总体来说,这个操作符重载实现了将 __int128
类型的数据以特定的方式转换为字符串并输出的功能。但需要注意的是,__int128
不是标准 C++ 类型,其使用可能因编译器和环境而有所不同。
所以重点是电脑的编译器和赛场的编译器允许。