You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

可能的问题点

  1. 字符串比较而非数值比较:[[ "$var0" < "$T" ]]是按字符串字典序比较,而非数值大小比较。比如当T为"10"、var0为"9"时没问题,但如果测试用例中T的输入带前导零(比如"010"),字符串比较会认为"9" > "010",导致循环提前终止,少处理部分测试用例。应改用数值比较:(( var0 < T ))。
  2. 输入读取的鲁棒性不足: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:42:37