これは数値の階乗を計算するプログラムで、ベクトルに格納します。このプログラムは 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");
}
}