输入1和1输出112,多输了一个,不知道为什么
#include <bits/stdc++.h>
using namespace std;
int ans[2000010],ans2[2000010];
void gd(int a){
int len=ans[0];
for(int i=1;i<=len;i++){
ans[i]*=a;
}
for(int i=1;i<=len;i++){
ans[i+1]+=ans[i]/10;
ans[i]*10;
}
while(ans[len+1]){
len++;
if(ans[len]>=10){
ans[len+1]+=ans[len]/10;
ans[len]%10;
}
}
ans[0]=len;
}
void gd2(int a){
int len=ans2[0];
for(int i=1;i<=len;i++){
ans2[i]*=a;
}
for(int i=1;i<=len;i++){
ans2[i+1]+=ans2[i]/10;
ans2[i]*10;
}
while(ans2[len+1]){
len++;
if(ans2[len]>=10){
ans2[len+1]+=ans2[len]/10;
ans2[len]%10;
}
}
ans2[0]=len;
}
void jf(){
int len1=ans[0],len2=ans2[0];
for(int i=1;i<=len2;i++){
if(ans[i]>=ans2[i]){
ans[i]-=ans2[i];
}
else{
ans[i+1]-=1;
ans[i]=ans[i]+10-ans2[i];
}
}
while(ans[len2+1]<0){
len2++;
ans[len2]+=10;
ans[len2+1]-=1;
}
}
int main(){
int n,m;
cin>>n>>m;
ans[0]=ans2[0]=1;
ans[1]=1;
ans2[1]=2;
for(int i=n+3;i>n+3-m;i--){
gd(i);
}
for(int i=1;i<=n+2;i++){
gd(i);
}
for(int i=n+2;i>n+2-m;i--){
gd2(i);
}
for(int i=1;i<=n+1;i++){
gd2(i);
}
jf();
for(int i=ans[0];i>=1;i--) cout<<ans[i];
return 0;
}