Pagini recente » Cod sursa (job #2474670) | Cod sursa (job #1930624) | Cod sursa (job #2456500) | Cod sursa (job #977544) | Cod sursa (job #465788)
Cod sursa(job #465788)
#include<stdio.h>
#include<string.h>
#include<math.h>
#define prim 10000
char s[1000];
int x[1000],p,nr,m,frec[20];
void adun(int val)
{
int t=0,i;
x[1]=x[1]+val;
for (i=1;i<=x[0]&&t;++i)
{
t=(x[i]+t)/prim;
x[i]=(x[i]+t)%prim;
}
if (t!=0)
x[++x[0]]=t;
}
void inm(int val)
{
int t=0,i;
for (i=1;i<=x[0];++i)
{
t=(x[i]*val+t)/prim;
x[i]=(x[i]*val+t)%prim;
}
if (t!=0)
x[++x[0]]=t;
}
void back(int rest,int cif)
{
int i;
if (cif==m)
{
if (rest==0)
adun(1);
return;
}
for (i=0;i<=9;++i)
if (frec[i])
{
--frec[i];
back((rest*10+i)%p,cif+1);
++frec[i];
}
}
int main()
{
int i,j;
freopen("ratphu.in","r",stdin);
freopen("ratphu.out","w",stdout);
gets(s+1);
nr=strlen(s+1);
x[++x[0]]=0;
for (i=1;i<=nr;++i)
if (s[i]!=' ')
++frec[s[i]-'0'];
else
break;
m=i-1;
for (j=i+1;j<=nr;++j)
{
p=p*10+(s[j]-'0');
}
back(0,0);
for (i=0;i<=9;++i)
for (j=2;j<=frec[i];++j)
inm(j);
for (i=x[0];i>=1;--i)
printf("%d",x[i]);
return 0;
}