DCoder平台Swift位运算代码过样例但未通过全部测试求助
问题分析与解决方案
你的代码能通过样例但无法通过其他测试,核心问题出在两个地方:
1. 数组越界风险
当输入的数值个数不足5个时,直接访问splitVariable[4]会触发数组越界崩溃,而测试用例可能包含这类异常输入(尽管约束说明是5个正整数,但平台可能加入边界测试)。
2. 移位位数超限导致运行错误
Swift的移位运算符要求移位位数必须小于对应整数类型的位数(64位Int的话,移位位数需<64),但约束中q的取值范围是0-255,当q≥64时,直接执行p << q或p >> q会触发运行时错误。
修改后的代码
import Foundation var myInput: String = readLine() ?? "" let splitVariable = myInput.split(separator: " ").map(String.init) // 安全获取参数,避免数组越界 let a = splitVariable.count > 0 ? Int(splitVariable[0]) ?? 0 : 0 let b = splitVariable.count > 1 ? Int(splitVariable[1]) ?? 0 : 0 let p = splitVariable.count > 2 ? Int(splitVariable[2]) ?? 0 : 0 let q = splitVariable.count > 3 ? Int(splitVariable[3]) ?? 0 : 0 let x = splitVariable.count > 4 ? Int(splitVariable[4]) ?? 0 : 0 // 处理移位位数,确保不超过64位Int的限制 let safeShiftCount = q % 64 print(a & b) print(a | b) print(a ^ b) print(p << safeShiftCount) print(p >> safeShiftCount) print(~x)
关键修改说明
- 数组越界防护:通过判断数组长度安全获取每个参数,避免因输入不足导致崩溃。
- 移位位数处理:对q取模64,确保移位操作符合Swift运算符的要求,同时符合位运算中“移位位数取模类型位数”的常规逻辑。
- 输入容错:将空输入的默认值改为空字符串,避免不必要的占位符干扰。
内容的提问来源于stack exchange,提问作者Justa Guy
相关产品推荐
相关产品推荐

