题解:P10446 64位整数乘法
大家好,是今天来给大家讲解一下c++中一种比 long long还大的数据类型,__int128!!
首先看数据,肯定炸 long long 了,写高精?不,看数据范围__int128 最多可以表示 __int128 需要手写输入输出,那就我们一起来写一下吧!
首先输入放一下代码:
快读:
__int128 read()
{
string arr;
cin >> arr;//输入
__int128 res = 0;
int sign = 1;
if (arr[0] == '-') //如果是负数
{
sign = -1;
for (int i = 1; i < arr.size(); ++i) //把负号过滤掉
{
res = res * 10 + (arr[i] - '0');//__int128是支持加减乘除的,所以我们直接把字符串转换为__int128就可以了
}
} else //不是负数
{
for (int i = 0; i < arr.size(); ++i)
{
res = res * 10 + (arr[i] - '0');//同上
}
}
return res * sign;//是负数的话会返回负数,否则返回整数
}
快写:
void print(__int128 num)
{
if (num < 0)
{
putchar('-');//小于0输出符号
print(-num);//递归,返回-num
}
else if (num > 9) //大于等于10
{
print(num / 10);
putchar(num % 10 + '0');
}
else
{
putchar(num + '0');//直接输出,__int128类型的数是不可以直接cout的!
}
}
快读快写使用方式
#include<bits/stdc++.h>
using namespace std;
__int128 read()
{
char arr[100];
cin >> arr;
__int128 res = 0;
int sign = 1;
if (arr[0] == '-')
{
sign = -1;
for (int i = 1; i < strlen(arr); ++i)
{
res = res * 10 + (arr[i] - '0');
}
} else
{
for (int i = 0; i < strlen(arr); ++i)
{
res = res * 10 + (arr[i] - '0');
}
}
return res * sign;
}
void print(__int128 num)
{
if (num < 0)
{
putchar('-');
print(-num);
}
else if (num > 9)
{
print(num / 10);
putchar(num % 10 + '0');
}
else
{
putchar(num + '0');
}
}
main()//其实就是 int main()另一种写法
{
__int128 a,b;
a=read();
b=read();
print(a+b);
return 0;
}
好了,快读快写的代码和使用方式知道了,代码就很简单了,只需要把改一下读入数据,输出方式就可以了!代码就不放了。
AC纪录