i want to print the double base representation of a number

ie if my number is 38 i shud get 36 + 2 and for 655 i shud get 648 + 6 + 1.

here's my code:

wat im doing in my code for alg() is im finding the element in the array using bs()Code:unsigned long bs(unsigned long a[],unsigned long d, unsigned long beg, unsigned long end, unsigned long x) { int mid; mid=(beg+end)/2; if (x<a[mid]) { end=mid-1; bs(a,d,beg,end,x); } else if(x<a[mid]) { beg=mid+1; bs(a,d,beg,end,x); } else if(x>a[end]) { cout<<a[end]<<" + "; return a[end]; } else if(x==a[mid]) { cout<<"FOUND!!\n"; return a[mid]; } } void alg(unsigned long a[],unsigned long d, unsigned long x) { unsigned long num; num=(x-bs(a,d,0,30,x)); if (num>0) alg(a,d,num); } main() { int c,n,d; d=c=(unsigned long)(pow(32,2)); unsigned long a[d],b[c],t,x,y; d=c=0; a[0]=0; b[0]=0; for(int i=0;i<32;i++) { for(int j=0;j<32;j++) { b[c]=(unsigned long)(pow(2,i)*pow(3,j)); if(j==0 || ULONG_MAX/pow(3,j)>pow(2,i)) { a[++d]=b[c++]; // cout<<i<<"\t"<<j<<"\t"<<a[d]<<endl; } else { break; } } } sort(a,a+d); cout<<"enter element:"; cin>>x; cout<<"its representation is :"<<endl; alg(a,d,x); system("PAUSE"); }

if the elemnt i want is in the array im printing that otherwise im finding the element that is closest (from the lesser side) to it and finding the difference ie (x - closest number to x) and calling alg for the difference and so on.

ie for 655 the closest elemnt is 648 and 655-648 is 7 , calling alg with 7 gives the closest elemnt as 6 n 7-6 is 1 n so on..

in my bs() code im returning the elemnt or the one which is closest to it. but somehow its not printing that elemnt n neither is it returning it.

please help...

thanks for reading!