1.前言
不知道你有没有遇到过这种问题:在刷题时遇到的数据范围超过了long long,但是需要很多计算,使用高精度非常麻烦,这时我们就可以使用__int128。
2.定义与数据范围
首先我们来说说__int128的定义,__int128的定义跟普通的变量一样,我们来看看代码:
//这是代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
__int128 a;
return 0;
}
好了我们的__int128就已经定义完成了下面我们再说说__int128的数据范围,__int128的数据范围是,而unsigned __int128(无符号__int128)的定义是:
//这是代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
unsigned __int128 a;
return 0;
}
其范围是
3.输入与输出
__int128不支持输入输出,仅支持四则运算:加,减,乘,除,但是我们可以通过四则运算以及字符串来进行输入,代码如下:
//这是输入
#include<bits/stdc++.h>
using namespace std;
__int128 input()
{
string s;
cin>>s;
__int128 a=0;
for(int i=0;i<s.size();i++)
{
a*=10;
a+=s[i]-48;
}
return a;
}
int main()
{
return 0;
}
然后是输出:
#include<bits/stdc++.h>
using namespace std;
void print(__int128 a)
{
string s="";
while(a)
{
s+=(a%10)+48;
a/=10;
}
reverse(s.begin(),s.end());
cout<<s;
return;
}
int main()
{
return 0;
}
最后我们再把输入输出结合在一起试一试:
//这是代码
#include<bits/stdc++.h>
using namespace std;
void print(__int128 a)
{
string s="";
while(a)
{
s+=(a%10)+48;
a/=10;
}
reverse(s.begin(),s.end());
cout<<s;
return;
}
__int128 input()
{
string s;
cin>>s;
__int128 a=0;
for(int i=0;i<s.size();i++)
{
a*=10;
a+=s[i]-48;
}
return a;
}
int main()
{
__int128 a=input();
print(a);
return 0;
}
输入:
//这是输入
123
输出:
//这是输出
123
我们再乘个10试试:
//这是代码
#include<bits/stdc++.h>
using namespace std;
void print(__int128 a)
{
string s="";
while(a)
{
s+=(a%10)+48;
a/=10;
}
reverse(s.begin(),s.end());
cout<<s;
return;
}
__int128 input()
{
string s;
cin>>s;
__int128 a=0;
for(int i=0;i<s.size();i++)
{
a*=10;
a+=s[i]-48;
}
return a;
}
int main()
{
__int128 a=input();
a*=10;
print(a);
return 0;
}
输入:
//这是输入
123
输出:
//这是输出
1230
还是正确的。
4.备注
本次使用的软件是Dev-C++ 5.11,编译器是GUN C++11