這是一個計算一個數的階乘的程序,我將它存儲在一個向量中。該程序適用於最多30個輸入,但對於n = 40或更大,它會產生一個奇怪的輸出。 例如。爲什麼輸出包含 - 在這個程序中?
輸入:
3
4
30
40
輸出:
24
265252859812191058636308480000000
-190350521-236-6-6-5-745611269596115894272000000000
哪裏此 - 號從何而來?
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
vector<int> solve(int n){
if(n==1){
vector<int> ans;
ans.push_back(1);
return ans;
}
vector<int> b=solve(n-1);
int temp=0,x=0;
for(int i=0;i<b.size();i++){
x=b[i]*n+temp;
b[i]=x%10;
temp=x/10;
}
if(temp!=0)
b.push_back(temp);
return b;
}
int main(){
int t,n,i;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
vector<int> ans=solve(n);
for(int j=ans.size()-1;j>=0;j--)
printf("%d",ans[j]);
printf("\n");
}
}
由於您使用_signed_整數? –
但我正在計算整個向量 int代碼,所以它在哪裏消極? –
Jignesh
如果您不相信我,請使用調試器遍歷代碼,並且您會看到您向矢量中推入的某些值將爲負數。請參閱David Schwartz關於此原因的答案。 –