#include<iostream>
#include<string>
using namespace std;
string sodu;
int gr(string, string);
string cong(string, string);
string tru(string, string);
string nhan(string, string);
string chia(string, string);
int main()
{
string soTest;
string a, b;
int op;
cin>>soTest;
while(soTest[0]=='0' && soTest.length() > 1) soTest.erase(soTest.begin(), soTest.begin()+1);
while(soTest != "0"){
soTest = tru(soTest, "1");
cin>>op>>a>>b;
while(a[0]=='0' && a.length() > 1) a.erase(a.begin(), a.begin()+1);
while(b[0]=='0' && b.length() > 1) b.erase(b.begin(), b.begin()+1);
if(op == 0) cout<<gr(a, b)<<endl;
else if(op == 1) cout<<cong(a, b)<<endl;
else if(op == 10) cout<<tru(a, b)<<endl;
else if(op == 11) cout<<nhan(a, b)<<endl;
else if(op == 100) cout<<chia(a, b)<<" "<<sodu<<endl;
}
return 0;
}
int gr(string a, string b)
{
long la = a.length();
long lb = b.length();
if(la > lb) return 1;
else if(la < lb) return 0;
else{
for(long i=0; i<la; i++){
if(a[i] > b[i]) return 1;
else if(a[i] < b[i]) return 0;
}
return 0;
}
}
char exor(char a, char b)
{
if(a != b) return '1';
else return '0';
}
string cong(string a, string b)
{
char out = '0', t;
long la = a.length();
long lb = b.length();
string c = "";
while(la > 0 && lb > 0){
la--;
lb--;
t = exor(a[la], b[lb]);
c = exor(t, out) + c;
if((a[la]==b[lb] && a[la]=='1') || (t==out && out=='1')) out = '1';
else out = '0';
}
while(la > 0){
la--;
c = exor(a[la], out) + c;
if(a[la]==out && out=='1') out = '1';
else out = '0';
}
while(lb > 0){
lb--;
c = exor(b[lb], out) + c;
if(b[lb]==out && out=='1') out = '1';
else out = '0';
}
if(out == '1') c = '1' + c;
return c;
}
string tru(string a, string b)
{
char out = '0', t;
long la = a.length();
long lb = b.length();
string c = "";
while(la > 0 && lb > 0){
la--;
lb--;
t = exor(a[la], b[lb]);
c = exor(t, out) + c;
if((a[la]=='0' && b[lb]=='1') || (t=='0' && out=='1')) out = '1';
else out = '0';
}
while(la > 0){
la--;
c = exor(a[la], out) + c;
if(a[la]=='0' && out=='1') out = '1';
else out = '0';
}
while(lb > 0){
lb--;
c = exor(exor('0', b[lb]), out) + c;
if(b[lb]=='1' || (b[lb]=='0' && out=='1')) out = '1';
else out = '0';
}
while(c[0]=='0' && c.length() > 1) c.erase(c.begin(), c.begin()+1);
return c;
}
string nhan(string a, string b)
{
long la = a.length();
long lb = b.length();
string d = a;
string c = "0";
while(lb>0){
lb--;
if(b[lb]=='1') c = cong(c, d);
d += '0';
}
return c;
}
string chia(string a, string b)
{
if(b == "0"){
sodu = "0";
return "0";
}
else if(!gr(a, b) && a!=b){
sodu = a;
return "0";
}
else if(a==b){
sodu = "0";
return "1";
}
else{
long la = a.length();
long lb = b.length();
string c = "";
sodu = "";
for(long i = 0; i < lb; i++) sodu += a[i];
long tro = lb-1;
if(!gr(sodu, b) && sodu != b) sodu += a[++tro];
while(tro < la-1){
tro++;
if(gr(sodu, b) || sodu == b){
c += '1';
string t = tru(sodu, b);
if(t != "0") sodu = t + a[tro];
else sodu = a[tro];
}
else{
c += '0';
sodu += a[tro];
}
}
if(gr(sodu, b) || sodu == b){
c += '1';
sodu = tru(sodu, b);
}
else c += '0';
return c;
}
}
I am a newbie.
I can’t find anything wrong. Please help me! Thank you!