Bash求余代码提交CodeChef失败,求问题原因
问题分析:Bash取余程序提交失败排查
CodeChef题目要求
编写程序计算整数A除以整数B的余数。
输入
第一行输入整数T,表示测试用例总数。随后T行,每行包含两个整数A和B。
输出
对于每个测试用例,计算A除以B的余数并在新行输出。
约束条件
- 1 ≤ T ≤ 1000
- 1 ≤ A,B ≤ 10000
我的解决方案及问题
我写了以下Bash脚本,能通过样例测试,但提交时未通过部分测试用例,我确信代码是正确的,可能的问题是什么?
#!/bin/bash read T var0=0 while [[ "$var0" < "$T" ]] do read A B echo $(( A % B )) (( var0++ )) done
可能的问题点
- 字符串比较而非数值比较:
[[ "$var0" < "$T" ]]是按字符串字典序比较,而非数值大小比较。比如当T为"10"、var0为"9"时没问题,但如果测试用例中T的输入带前导零(比如"010"),字符串比较会认为"9" > "010",导致循环提前终止,少处理部分测试用例。应改用数值比较:(( var0 < T ))。 - 输入读取的鲁棒性不足:
read A B在遇到格式异常的输入行(比如多余空格、空行)时,可能无法正确赋值A和B,导致取余运算出错。可以添加输入校验,或者改用更稳定的读取方式。
修正后的代码示例
#!/bin/bash read T var0=0 # 改用数值比较的循环条件 while (( var0 < T )) do read A B echo $(( A % B )) (( var0++ )) done
或者更简洁的for循环写法,避免计数器维护问题:
#!/bin/bash read T for ((i=0; i<T; i++)); do read A B echo $((A % B)) done
内容的提问来源于stack exchange,提问作者kiril
相关产品推荐
相关产品推荐

