Pagini recente » Cod sursa (job #1092634) | Cod sursa (job #1146998) | Cod sursa (job #873867) | Cod sursa (job #2114409) | Cod sursa (job #1920549)
#include<fstream>
using namespace std;
typedef int BIG[500];
int n,d,m,i,j,k,r,q,aux;
BIG Lc[501],Lp[501];
ifstream f("expozitie.in");
ofstream g("expozitie.out");
void sum(BIG a, BIG b, BIG &s)//suma a 2 numere mari, s=a+b
{
//a[0]=nr cifrelor lui a
//b[0]=nr cifrelor lui b
int i,cifra,t = 0,max;
if(a[0]<b[0])
{
max=b[0];
for(i=a[0]+1;i<=b[0];i++) a[i]=0;//lungim vectorul a adaugand 0
}
else
{
max=a[0];
for(i=b[0]+1;i<=a[0];i++) b[i]=0; //lungim vectorul b adaugand 0
}
for(i=1;i<=max;i++)
{
cifra=a[i]+b[i]+t; s[i]=cifra%10; t=cifra/10; //facem adunarea, t=depasirea
}
if(t) s[i]=t;
else i--;
s[0]=i;
}
int main()
{
f>>n>>d>>k;
r=n-k*d;
if(r<0)g<<0;
else
if(r==0)g<<1;
else
{
m=r+d-1;
for(i=1;i<=r;i++) Lp[i][0]=Lp[i][1]=1;
for(i=2;i<=d;i++)
{
aux=i;Lc[1][0]=0;
while(aux)
{
Lc[1][0]++;
Lc[1][Lc[1][0]]=aux%10;
aux=aux/10;
}
for(j=2;j<=r;j++)
sum(Lp[j],Lc[j-1],Lc[j]);
for(j=0;j<=r;j++)
for(q=0;q<=Lc[j][0];q++)
Lp[j][q]=Lc[j][q];
}
for(j=Lc[r][0];j>=1;j--) g<<Lc[r][j];
}
f.close();g.close();
return 0;
}