强制类型转换 什么时候要用long long int

问题遇到的现象和发生背景

pta 乙级1030 完美数列

问题相关代码,请勿粘贴截图

img

运行结果及报错内容
我的解答思路和尝试过的方法

第十五行为什么这样写就对 (long long)(ch[i]*p)这样就不行
或者第十五行不加long long ,定义时long long int p就行了

我想要达到的结果

在我现在浅薄的认识里,爆是指int i,然后i的值超过了比如说2^32
这里又没有定义一个变量放ch[i]*p的值,也要long long 吗
不太理解

因为ch[i]*p如果ch[i]或p是int,ch[i]*p的结果也是int,如果它的值是大于2^32的话,会爆的,就是比如限制值最大为1111,就是只有四个位,然后有某个数二进制计算获得值本来是10000,由于只有四个位,所以实际上最终这个值是0000,就被误算为其他的结果了

一般看数据范围,和计算可能达到的值。这题是乘法,p最大有1e9,ai最大也有1e9。两者相乘就是1e18,而int最大是1e10左右,乘法计算就可能爆int,而爆int的答案要和aj进行比较,明显就不可能有正确的结果。