Pagini recente » Cod sursa (job #2510241) | Cod sursa (job #2611663) | Cod sursa (job #1140256) | Cod sursa (job #1735795) | Cod sursa (job #2321419)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cifre.in");
ofstream g("cifre.out");
int a,b,c,k,i,j,x,y,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)
{
if(cnt<mi)return 0;
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<=0)
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;
// if(!k)
// {
// g<<1;
// return 0;
// }
a--;
int aub=b,aua=a;
if((!a)&&(!c))y++;
while(a)
{
A[++cnt]=a%10;
a/=10;
}
x+=fun(cnt,k);
//g<<aua<<':'<<x<<' ';
if(!c)
x+=9*Get(cnt-2,k)-Get(cnt-1,k-1);
cnt=0;
while(b)
{
A[++cnt]=b%10;
b/=10;
}
y+=fun(cnt,k);
//g<<aub<<':'<<y<<'\n';
if(!c)
y+=9*Get(cnt-2,k)-Get(cnt-1,k-1);
//g<<aua<<':'<<x<<' '<<aub<<':'<<y<<'\n';
g<<(double)(y-x)/(double)(aub-aua);
return 0;
}