Pagini recente » Cod sursa (job #2775683) | Cod sursa (job #2382870) | Cod sursa (job #122097) | Cod sursa (job #1599295) | Cod sursa (job #2321354)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cifre.in");
ofstream g("cifre.out");
int a,b,c,k,i,j,cnt,A[30],C[20][20];
int put(int b,int e)
{
int ret=1;
while(e)
{
if(e&1)
ret*=b;
e>>=1;b*=b;
}
return ret;
}
int Get(int cnt,int mi)
{
int ret=0;
for(int i=mi;i<=cnt;i++)
ret+=C[cnt][i]*put(9,cnt-i);
return ret;
}
int fun(int i,int lft)
{
int ret=0;
if(!i)
{
if(!lft)
return 1;
return 0;
}
if(c>A[i])
ret=fun(i-1,lft)+A[i]*Get(i-1,lft);
else
if(c==A[i])
ret=fun(i-1,lft-1)+A[i]*Get(i-1,lft);
else
ret=fun(i-1,lft)+(A[i]-1)*Get(i-1,lft)+Get(i-1,lft-1);
return ret;
}
int main()
{
for(i=0;i<=10;i++)
C[i][0]=1;
for(i=1;i<=10;i++)
for(j=1;j<=i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
f>>a>>b>>c>>k;a--;
int aub=b,aua=a;
while(a)
{
A[++cnt]=a%10;
a/=10;
}
int x=fun(cnt,k);
cnt=0;
while(b)
{
A[++cnt]=b%10;
b/=10;
}
int y=fun(cnt,k);
g<<(double)(y-x)/(double)(aub-aua);
return 0;
}