【发布时间】:2016-11-21 07:37:54
【问题描述】:
我正在解决一个问题,其中任务是在用户提到的给定行输出帕斯卡三角形的结果。
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,我想知道为什么要强制转换 unsigned long long仍然给我有效的结果。
【问题讨论】:
-
只是猜测...可能是因为除以
i后,该值又回到了int为完整且合法值的区域?
标签: c++ casting int unsigned-long-long-int