// UVa 11744 - Parallel Carry Adder
#include <iostream>
#include <string>
using namespace std;
#define integer unsigned long long
integer from_binary(string s) {
integer n = 0;
for (int i = 0; i < s.length(); i++)
n = (n << 1) | (s[i] - '0');
return n;
}
string to_binary(integer n) {
string s = "";
for (int i = 30; i >= 0; i--)
if (n & (1 << i))
s += "1";
else
s += "0";
return s;
}
int main() {
int t;
for (cin >> t; t; t--) {
string aa, bb;
cin >> aa >> bb;
integer a = from_binary(aa);
integer b = from_binary(bb);
integer lim = 2147483648;
while (b > 0 && b < lim) {
cout << to_binary(a) << " " << to_binary(b) << endl;
integer c = a ^ b;
integer d = a & b;
a = c;
b = d << 1;
}
if (b >= lim)
cout << to_binary(a) << " overflow" << endl;
else
cout << to_binary(a) << " " << to_binary(b) << endl;
if (t > 1)
cout << endl;
}
return 0;
}
Monday, April 11, 2016
UVa 11744 - Parallel Carry Adder
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment