📄 1261.cpp
字号:
#include<iostream>
#include<string>
using namespace std;
char c[321][15][1000];
void main()
{
int i,j,k,n;
char temp[1000],result[1000];
int s[30],total;
for(i=0;i<=320;i++)
for(j=0;j<=12;j++)
if(j==0) strcpy(c[i][j],"1");
else strcpy(c[i][j],"0");
for(i=1;i<=320;i++)
for(j=1;j<=i&&j<=12;j++){
int lena=strlen(c[i-1][j-1]);
int lenb=strlen(c[i-1][j]);
int st[1000]={0},ed[1000]={0},re[1000]={0};
for(k=0;k<lena;k++)
st[k]=c[i-1][j-1][lena-k-1]-'0';
for(k=0;k<lenb;k++)
ed[k]=c[i-1][j][lenb-k-1]-'0';
int left=0,len=lena>lenb?lena:lenb;
for(k=0;k<len;k++){
re[k]=(st[k]+ed[k]+left)%10;
left=(st[k]+ed[k]+left)/10;
}
if(left>0){
len++;
re[len-1]=left;
}
for(k=0;k<len;k++)
c[i][j][k]=re[len-k-1]+'0';
}
while(cin>>n){
if(!n) break;
memset(result,0,sizeof(result));
memset(s,0,sizeof(s));
i=0;total=0;
while(i<n){
cin>>s[i];
total+=s[i];
i++;
}
i=0;
strcpy(result,"1");
while(i<n){
memset(temp,0,sizeof(temp));
int lena=strlen(result);
int lenb=strlen(c[total][s[i]]);
int st[1000]={0},ed[1000]={0},re[1000]={0};
for(k=0;k<lena;k++)
st[k]=result[lena-k-1]-'0';
for(k=0;k<lenb;k++)
ed[k]=c[total][s[i]][lenb-k-1]-'0';
for(k=0;k<lena;k++)
for(j=0;j<lenb;j++){
re[k+j]+=st[k]*ed[j];
re[k+j+1]+=re[k+j]/10;
re[k+j]%=10;
}
int len=lena+lenb+2;
while(re[len-1]==0&&len>=1)
len--;
for(k=0;k<len;k++)
temp[k]=re[len-k-1]+'0';
strcpy(result,temp);
total-=s[i];
i++;
}
cout<<result<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -