Pagini recente » Cod sursa (job #1069860) | Istoria paginii runda/abac | Cod sursa (job #872796) | Cod sursa (job #2160060) | Cod sursa (job #1680373)
#include <fstream>
#include <cmath>
#define nmax 205
using namespace std;
unsigned short n,k;
struct numar
{
unsigned int nrc;
char s[nmax+200];
};
numar T[nmax][nmax];
numar pluss(numar A, numar B)
{
unsigned int i,t,x1,x2;
for (i=0,t=0;i<A.nrc || i<B.nrc || t;i++, t/=10)
{
if (A.s[i]==0) x1=0;
else x1=A.s[i]-'0';
if (B.s[i]==0) x2=0;
else x2=B.s[i]-'0';
t+=(x1+x2);
A.s[i]='0'+t%10;
}
A.nrc=i;
return A;
}
numar ori(numar A, short y)
{
unsigned int i,t,x;
for (i=0,t=0;i<A.nrc||t;i++, t/=10)
{
if (A.s[i]==0) x=0;
else x=A.s[i]-'0';
t+=(x*y);
A.s[i]='0'+t%10;
}
A.nrc=i;
return A;
}
void getst()
{
unsigned short i,j;
numar A;
T[1][1].nrc=1;
T[1][1].s[0]='1';
for (i=2;i<=n;i++)
{
for (j=1;j<=i;j++)
{
A=ori(T[i-1][j],i-1);
T[i][j]=pluss(T[i-1][j-1],A);
}
}
}
int main()
{
ifstream f("perm.in");
ofstream g("perm.out");
f>>n>>k;
getst();
int i;
numar A=T[n][k];
for (i=A.nrc-1;i>=0;i--)
{
g<<A.s[i];
}
g<<'\n';
f.close();
g.close();
return 0;
}