__int128_t 的使用

在 C++ 里,标准并未直接提供__int128_t类型,不过部分编译器(像 GCC 和 Clang)对其进行了扩展,这是一种 128 位的整数类型。该类型可处理远超long long范围的整数。下面为你介绍__int128_t的具体用法:

1. 声明与初始化

#include <iostream>

int main() {
    // 声明一个 __int128_t 类型的变量
    __int128_t num1;
    // 初始化
    __int128_t num2 = 12345678901234567890;
    return 0;
}

2. 基本运算

__int128_t类型支持常见的算术运算,如加、减、乘、除等。

#include <iostream>

int main() {
    __int128_t a = 12345678901234567890;
    __int128_t b = 9876543210987654321;
    __int128_t sum = a + b;
    __int128_t difference = a - b;
    __int128_t product = a * b;
    __int128_t quotient = a / b;
    return 0;
}

3. 输入输出

由于 C++ 标准库没有直接支持__int128_t类型的输入输出,所以得自定义函数来实现。

可以将_int128_t的输入输出利用字符串的输入输出来实现。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'

//构造__int128_t的输入和输出

__int128_t read(){
	__int128_t result=0;
	string s;
	bool flag=false; //标记是不是负数
	int i=0;        //字符串下标 
	cin>>s;
	if(s[i]=='-'){
		flag=true;
		i=1;
	}
	for(;i<s.size();i++){
		result=result*10+(s[i]-'0');
	}
	if(flag) result*=-1;
	return result;
}

void print(__int128_t num){
	string s="";
	while(num){
		s+=char('0'+num%10);
		num/=10;
	}
	reverse(s.begin(),s.end());  //翻转一下 
	cout<<s<<endl;
}

signed main(){
	__int128_t num=read();
	print(num);
	return 0;
} 

注意事项

  • 可移植性__int128_t属于编译器扩展,并非 C++ 标准的一部分,因此在不支持该扩展的编译器上无法使用。
  • 输入输出:标准库没有直接支持__int128_t类型的输入输出,所以需要自定义函数来处理。
  • 性能:相较于普通整数类型,__int128_t类型的运算可能会更慢,因为它需要更多的处理资源。

这里补充介绍一下 reverse(s.begin() , s.end()) 函数,reverse是翻转函数,和fill函数一样,它的参数是迭代器或者指针,第一个参数是需要接受操作的第一个指针位置或者第一个迭代器,第二个参数是需要接受操作的最后一个指针位置+1 或者 最后一个迭代器位置+1 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值