1 条题解

  • 0
    @ 2025-10-10 15:45:58

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    /*
      计算2个二进制的数0或者1(字符)进行and or xor运算的结果 
    */
    char calc(char a,char b,string x){
    	char r;
    	if(x == "and"){
    		if(a == '1' && b == '1'){
    			r = '1';
    		}else{
    			r = '0';
    		}
    	} else if(x == "or"){
    		if(a == '1' || b == '1'){
    			r = '1';
    		}else{
    			r = '0';
    		}
    	}else if(x == "xor"){
    		if(a != b){
    			r = '1';
    		}else{
    			r = '0';
    		}
    	}
    	
    	
    	return r;
    	
    }
    
    int main(){
    	//定义完函数,调试一下,做一步测一步 
    	//cout<<calc('1','0',"xor");
    	
    	//开始编写程序
    	string s1,s2,r,x;//s1 s2代表2个要运算的数,r代表结果,x代表运算符
    	int len,i,j;
    	getline(cin,s1); 
    	getline(cin,s2);
    	getline(cin,x);
    	//得到较长的字符串的长度,按照这个长度运算,短的要在前面补0(相当于倒过来后面补0) 
    	len = s1.length() > s2.length()?s1.length():s2.length();
    	
    	if(s1.length() < len){
    		for(i = 1;i <= len - s1.length();i++){
    			s1 = '0' + s1;
    		}
    	} else if(s2.length() < len){
    		for(i = 1;i <= len - s2.length();i++){
    			s2 = '0' + s2;
    		}
    	}
    	
    	//测试一下补0是否正确
    	//cout<<s1<<" "<<s2<<endl; 
    	
    	//逐位运算
    	for(i = 0;i < len;i++){
    		r = r + calc(s1[i],s2[i],x);
    	} 
    	
    	//结果从第一个非0开始输出(这里删除r中前面的0,注意如果r都为0,会删光的,考虑特殊情况) 
    	while(r[0] == '0'){
    		r.erase(0,1);
    	}
    	
    	if(r.length() != 0){
    		cout<<r<<endl;
    	}else{
    		cout<<"0"<<endl;
    	}
    }
    
    • 1

    信息

    ID
    260
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者