# double base representation of a number

Discussion in 'C' started by ikj, May 28, 2009.

1. ### ikjNew Member

Joined:
May 14, 2009
Messages:
14
0
Trophy Points:
0
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:

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

```
wat im doing in my code for alg() is im finding the element in the array using bs()
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.

Joined:
Jul 12, 2004
Messages:
15,312
371
Trophy Points:
83
Try giving better titles as that helps others to see it as well. I have edited for you as of now.

3. ### ikjNew Member

Joined:
May 14, 2009
Messages:
14
0
Trophy Points:
0
sorry bout that..
thanks

4. ### SaswatPadhi~ Б0ЯИ Τ0 С0δЭ ~

Joined:
May 5, 2009
Messages:
1,343
55
Trophy Points:
0
Occupation:
STUDENT !
Location:
Orissa, INDIA
I hate to say this, but ijk, I really need to inspect your program yourself before dumping it in a forum.
Yeah, dumping is a harsh word to use, but look at your code. What do you think you are doing ! There are so damn many many mistakes. It was really really painful to find and correct the mistakes. It would have been much easier for me to write a program for double base representation, by myself.

( This is not an article, but don't blame me if it's as long as an article; 'cuz I have to highlight the mistakes )

Mistakes :

Code:
```[FONT="Fixedsys"]unsigned long bs(unsigned long a[],[COLOR="Red"]unsigned long d,[/COLOR] unsigned [COLOR="Red"]long[/COLOR] beg, unsigned [COLOR="Red"]long[/COLOR] end, unsigned long x)
{    [COLOR="Red"]// WHY DOES THIS FUNC ACCEPT 'd' ?? [/COLOR]
int mid;
mid=(beg+end)/2;
if (x<a[mid])
{
end=mid-1;
bs(a,d,beg,end,x);
}
else if(x[COLOR="Red"]<[/COLOR]a[mid])    [COLOR="Red"]//same as previous case !!!!!!!!! [/COLOR]
{
beg=mid+1;
bs(a,d,beg,end,x);
}
else if(x>a[end])                         [COLOR="Red"]// This should be the 2nd IF-check.[/COLOR]
{    cout<<a[end]<<" + ";
return a[end];
}
else if(x==a[mid])                       [COLOR="Red"]// This should be the first IF-check.[/COLOR]
{
cout<<"FOUND!!\n";
return a[mid];
}
}

void alg(unsigned long a[],unsigned [COLOR="Red"]long[/COLOR] d, unsigned long x)
{
unsigned long num;
num=(x-bs(a,[COLOR="Red"]d,[/COLOR]0,[COLOR="Red"]30,[/COLOR]x));
if (num>0)
alg(a,d,num);

}

[COLOR="Red"]int [/COLOR]main()
{     [COLOR="Red"]// main func was missing data-type ![/COLOR]
int c,n,d;
[COLOR="Red"]// 32^2 does not need unsigned long, unsigned int will do, array index should be int [/COLOR]not long.
d=c=(unsigned long)(pow(32,2));
[COLOR="Red"]      // array b was ABSOLUTELY un-necessary ![/COLOR]
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");
[COLOR="Red"]     return 0;      // no return ! [/COLOR]
}[/FONT]```

Remarks :
(1) Your program is full of sh*t. You need to revise your C++ lessons.
(2) Your algo implementations are really poor. Try to implement better algo.

Code:
```#include <iostream>
#include <cmath>

using namespace std;

unsigned long bs(unsigned long a[], unsigned beg, unsigned end, unsigned long x)
{
unsigned long mid;
mid=(beg+end)/2;

if (x==a[mid])
{
cout << a[mid];
return a[mid];
}
else if (beg>end)
{
cout<<a[end]<<" + ";
return a[end];
}
else if (x<a[mid])
{
end=mid-1;
return bs(a,beg,end,x);
}
else if (x>a[mid])
{
beg=mid+1;
return bs(a,beg,end,x);
}
}

void alg(unsigned long a[],unsigned d, unsigned long x)
{
unsigned long num;
num=x-bs(a,0,d,x);
if (num>0)
alg(a,d,num);

}

const unsigned SIZE = 144;
unsigned long a[SIZE],t,x,y;

int main()
{
int c,n,d;
d=c=0;
a[0]=0;
for (int i=0;i<12;i++)
for (int j=0;j<12;j++)
a[12*i+j]=(unsigned long)(pow(2.0,i)*pow(3.0,j));

sort(a,a+SIZE);
cout<<"Enter element : ";
cin>>x;
cout<<"Its representation is : "<<endl;
alg(a,SIZE-1,x);
putchar(10);
putchar(10);
system("PAUSE");
return 0;
}```

Sample run :
Enter element : 655
Its representation is :
648 + 6 + 1

Enter element : 36
Its representation is :
36

Enter element : 38
Its representation is :
36 + 2

Enter element : 444
Its representation is :
432 + 12

Enter element : 555
Its representation is :
512 + 36 + 6 + 1

Enter element : 23743
Its representation is :
23328 + 384 + 27 + 4

Enter element : 25653
Its representation is :
23328 + 2304 + 18 + 3

Enter element : 1
Its representation is :
1

Enter element : 0
Its representation is :
0

I repeat again, Please inspect your program yourself before throwing it into a forum.

Last edited: May 28, 2009