我正在解决一个问题,其中任务是在用户提到的给定行处输出pascal三角形的结果。将int转换为无符号long long
https://leetcode.com/problems/pascals-triangle-ii/
我写我的溶液,其存储了巨大的阶乘结果的问题。
vector<int> getRow(int rowIndex) {
vector<int> v;
int C = 1;
v.push_back(1);
for (int i = 1; i <= rowIndex; i++)
{
printf("%d ", C);
C = C * (rowIndex +1 - i)/i;
v.push_back(C);
}
return v;
}
通过这些问题去,
What range of values can integer types store in C++
How many bytes is unsigned long long?
,并通过一些其他渠道去,我做了如下改变,这给了我需要的结果。
C = (unsigned long long)C * (rowIndex +1 - i)/i;
由于“C”是一个类型INT和我的矢量V存储INT的,我想知道为什么会铸造无符号长长仍然给我有效的结果。
只是一个猜测......也许是因为经过'i'除法后,数值会回到'int'是一个完整且合法的值的区域? –