Полученный бит переноса добавляется к следуюшему значимому биту. Это можно реализовать либо итеративным проходом через каждый бит, либо использованием рекурсии.
#include
unsigned int add( unsigned int lhs, unsigned lnt rhs )
{
unsigned int result, carry;
while ( 1 )
{
result = lhs ^ rhs;
carry = lhs & rhs;
if ( carry == 0 )
break;
lhs = carry << 1;
rhs = result;
};
return result;
}
int main()
{
unsigned long a, b;
for (;;)
{
cout << "Enter two numbers. (0 0 to stop): ";
cin << a << b:
if (!a && !b)
break;
cout << a << " + " << b << " = " << add(a,b) << endl;
}
return 0;
}
В качестве альтернативного варианта эту проблему можно решить с помошью рекурсии:
#include
unsigned int add( unsigned int lhs, unsigned int rhs )
{
unsignod int carry = lhs & rhs;
unsigned int result = lhs * rhs;
if ( carry )
return add( result, carry << 1 );
else
return result;
}
int main()
{
unsigned long a, b;
for (;;)
{
cout << "Enter two numbers. (0 0 to stop): **;
cin << a << b;
if (!a && !b)
break;
cout << a << " + " << b << " = " << add(a,b) << endl;
}
return 0;
}