# XOR of very large Binary Numbers in range [L, R]

#include using namespace std; string sub(string s){ int n = s.size(); for (int i = n – 1; i >= 0; i–) { if (s[i] == ‘0’) { s[i] = ‘1’; } else { s[i] = ‘0’; break; } } return s;} string ad(string s){ int n = s.size(); int carry = 0; for (int i = n – 1; i >= 0; i–) { if (s[i] == ‘1’) { carry = 1; s[i] = ‘0’; } else { carry = 0; s[i] = ‘1’; break; } } if (carry) { s = ‘1’ + s; } return s;} string xor_finder(string s){ int n = s.size() – 1; int val = s[n] – ‘0’; val = val + (s[n – 1] – ‘0’) * 2; if (val == 0) { return s; } else if (val == 1) { s = ‘1’; return s; } else if (val == 2) { return (ad(s)); } else if (val == 3) { s = ‘0’; return s; }}string final_xor(string L, string R){ while (L.size() != R.size()) { L = ‘0’ + L; } string ans = “”; for (int i = 0; i < L.size(); i++) { if (L[i] == '0' && R[i] == '0') { ans += '0'; } else if (L[i] == '0' && R[i] == '1' || L[i] == '1' && R[i] == '0') { ans += '1'; } else { ans += '0'; } } return ans;} string xorr(string L, string R){ L = sub(L); L = xor_finder(L); R = xor_finder(R); string ans = final_xor(L, R); return ans;} int main(){ string L = "10", R = "10000"; cout