I am making a program that adds two binary numbers (up to 31 digits) together and outputs the sum in binary.
I have every thing working great but I need to remove the leading zeros off the solution.
This is what my output is:
char c[32];
int carry = 0;
if(carry == '1')
{
cout << carry;
}
for(i = 0; i < 32; i++)
{
cout << c[i];
}
I tried this but it didn’t work:
char c[32];
int carry = 0;
bool flag = false;
if(carry == '1')
{
cout << carry;
}
for(i=0; i<32; i++)
{
if(c[i] != 0)
{
flag = true;
if(flag)
{
for(i = 0; i < 32; i++)
{
cout << c[i];
}
}
}
}
Any ideas or suggestions would be appreciated.
EDIT: Thank you everyone for your input, I got it to work!
You should not have that inner loop (inside
if(flag)). It interferes with theiprocessing of the outer loop.All you want to do at that point is to output the character if the flag is set.
And on top of that, the printing of the bits should be outside the detection of the first bit.
The following pseudo-code shows how I’d approach this:
The first block of code may need to be changed to accurately output the number with carry. For example, if you ended up with the value 2 and a carry, you would want either of:
Simply outputting
110with no indication that the leftmost bit was a carry could either be:The last block ensures you have some output for the value 0 which would otherwise print nothing since there were no 1 bits.
I’ll leave it up to you whether you should output a separator between carry and value (and leave that line commented out) or use carry to force
printingto true initially. The two options would be respectively:and:
And, since you’ve done the conversion to C++ in a comment, that should be okay. You state that it doesn’t work, but I typed in your code and it worked fine, outputting
10: