我正在编写一个简单的代码来计算大数的阶乘。我没有发现任何超出范围的内容,但仍然出现分段错误。如果您看到什么,请告诉我。
class Solution {
public:
vector<int> factorial(int N){
vector<int> fact;
fact.push_back(1);
for(int i=2; i<=N; i++){
int carry=0;
int j;
for(j=0; j<fact.size(); j++){
int val = fact[j]*i + carry;
fact[j] = val%10;
carry = val/10;
}
if(carry!=0){
fact[j] = carry;
}
}
reverse(fact.begin(), fact.end());
}
您未能将结果
push_back
变为fact
,这意味着它将始终保持在大小“1”。
此外,在第一次循环之后,您的
j
将具有 1
的值(循环的最后一次迭代中的 0
),导致您在检查向量时访问“不存在”索引进位(在循环之外)。