目录
简介
\(\_\_int 128\)并不是标准c/c++中的数据类型,而是一些特定编译器如gcc/g++提供的扩展数据类型。
支持运算
\(\_\_int128\)的是有符号128位整数变量,最多表示39位整数。
支持基本的加减乘除运算,以及按位与&、按位或|、按位异或^、左移<<、右移>>
输入输出
没有实现输入、输出,因此需要自己手动输入输出。
输入
__int128 read()
{
__int128 x=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-w;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return w*x;
}
输出
void write(__int128 x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
}
例题
例题
华华教月月做数学
快速幂+__int128就可以过掉这道题目
#include <bits/stdc++.h>
using namespace std;
__int128 read()
{
__int128 x=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-w;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*w;
}
void write(__int128 x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
}
__int128 qpow(__int128 a, __int128 b, __int128 p)
{
__int128 res=1;
while(b)
{
if(b&1) res=res%p*a%p;
a=a%p*a%p;
b>>=1;
}
return res;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
__int128 a=read(),b=read(),p=read();
write(qpow(a,b,p));
puts("");
}
}
标签:__,ch,read,write,while,int128
From: https://www.cnblogs.com/cxy8/p/18290474