1 条题解
-
0
自动搬运
来自洛谷,原作者为

囧仙
你做东方鬼畜音MAD,好吗?搬运于
2025-08-24 21:02:49,当前版本为作者最后更新于2021-07-03 11:06:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目大意
计算 ,满足 。
题解
提供一下相关类型的大小范围。
$$\def{\arraystretch}{1.8} \begin{array}{c|c|c||c|c|c}\hdashline \textbf{\textsf{类型}} & \textbf{\textsf{下界}} & \textbf{\textsf{上界}} & \textbf{\textsf{类型}} & \textbf{\textsf{下界}} & \textbf{\textsf{上界}} \cr\hline \verb!char! & -2^7 & 2^7-1 & \verb!unsigned char! & 0 & 2^8-1\cr\hline \verb!short! & -2^{15} & 2^{15}-1 & \verb!unsigned short! & 0 & 2^{16}-1 \cr\hline \verb!int! & -2^{31} & 2^{31}-1 & \verb!unsigned int! & 0 & 2^{32}-1 \cr\hline \verb!long long! & -2^{63} & 2^{63}-1 & \verb!unsigned long long! & 0 & 2^{64}-1 \cr\hdashline \end{array}$$那么如果选的类型小了会发生什么?
我们知道,在电脑中使用补码的形式存储所有数字。假如我们用的是 类型,那么当我们计算 时,本质上是 ,得出来的结果应该是:
$$1010001,\underbrace{0101,1100,1001,0010}_{16 \text{位}} $$事实上, 只会保留最后 位,前面溢出的部分就去除了。把 转换成 进制,就是 。你可以拿 C++ 试一试,可以发现强制转换成 后的确是这个值。
要注意的是,对于有符号整数,乘法溢出属于未定义行为,具体数值与编译器有关。
至于这题,由于 ,而 ,可能会突破 的上限()因此选择 类型才行。
参考代码
#include<bits/stdc++.h> #define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i) #define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i) using namespace std; typedef long long i64; const int INF =2147483647; char s[256]; i64 a,b; int main(){ cin>>a>>b; cout<<a*b; return 0; }
- 1
信息
- ID
- 6890
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 8
- 已通过
- 2
- 上传者