DEGREE - Số lượng bậc
Tác giả: hieult
Ngôn ngữ: C++
#include <stdio.h>
//#include <conio.h>
#include <math.h>
int x,y,b,k,kq,C[33][33];
int Round(double x)
{
if(x > 0)
return int(x + 0.5);
if(x < 0)
return int(x - 0.5);
return 0;
}
void doc()
{
scanf("%d %d %d %d",&x,&y,&k,&b);
for(int i=0;i<=32;i++)
for(int j=0;j<=32;j++)
C[i][j]=0;
for(int i=0;i<=32;i++)
C[0][i]=1;
for(int i=1;i<=32;i++)
for(int j=1;j<=i;j++)
C[j][i]=C[j][i-1]+C[j-1][i-1];
}
void xuat()
{
printf("%d\n",kq);
}
int Cal(int a,int k)
{
int i,n1,n,tmp,bn;
tmp=0;
n1 = 100000;
while(true)
{
if( k == 0)
{
tmp=tmp+1;
break;
}
else if (a < 1) break ;
n = int ( log(a) / log(b) ) ;
if (n >= n1) n = n1 - 1 ;
if (n ==-1 ) break;
tmp = tmp + C [k][n] ;
bn = Round ( pow (b,n) ) ;
a = a - bn ;
k = k - 1 ;
n1= n ;
}
return tmp ;
}
void lam()
{
int tmp1,tmp2;
tmp1 = Cal(x-1,k) ;
tmp2 = Cal(y,k) ;
kq= tmp2 - tmp1 ;
}
int main()
{
doc();
lam();
xuat();
}