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();
}
    

Download