我正在解決一個問題,其中任務是在用戶提到的給定行處輸出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'是一個完整且合法的值的區域? –