1 条题解
-
0
吾的想法是从右往左遍历每一位二进制位(这样判断是否补零比较方便),依次进行位运算,最后翻转输出. main code:
/* n1:第一个二进制数 n2:第二个二进制数 mod:运算符号 n1v:n1下标 n2v:n2下标 n1now:n1当前位 n2now:n2当前位 */ n1v = n1.size() - 1; n2v = n2.size() - 1; while (n1v >= 0 || n2v >= 0) { char n1now , n2now; //判断是否补零 if (n1v < 0) n1now = '0'; if (n2v < 0) n2now = '0'; if (n2v >= 0) n2now = n2[n2v]; if (n1v >= 0) n1now = n1[n1v]; //进行对应位运算 if (mod == "or") { if (n1now == '0' && n2now == '0') ans += '0'; else ans += '1'; } else if (mod == "and") { if (n1now == '1' && n2now == '1') ans += '1'; else ans += '0'; } else { if (n1now != n2now) ans += '1'; else ans += '0'; } n1v--; n2v--; } bool have1 = false;//have1记录结果中是否出现1 //翻转输出 for (int i = ans.size() - 1 ; i >= 0 ; i--) { if (ans[i] == '1') { have1 = true; } //判断是否为前导零,即第一次出现1之前的每一位 if (!(have1)) { continue; } cout << ans[i]; } //特判,若每一位都是0,则输出0 if (!(have1)) { cout << "0"; }
- 1
信息
- ID
- 277
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 8
- 标签
- 递交数
- 41
- 已通过
- 7
- 上传者