C语言求≤A且被B整除的最大数代码报错如何解决?
C代码问题排查
第一段代码问题点
- 存在无限死循环:内层
while(B > 0)逻辑中没有修改B的值,只要输入的B为正整数,程序会永远卡在该循环中,最终触发运行超时/崩溃。 - 逻辑错误:flag初始值设为1,当B>1时初始值本身就不满足被B整除的要求,结果会出错。
- 冗余低效:完全不需要遍历1到A的所有值来匹配结果,算法复杂度为O(A),当A取值极大时会直接超时。
- 输出格式错误:输入A后执行
printf("\n")会额外输出换行符,在线判题系统对输出格式要求严格,多余字符会直接判定结果错误。
第二段代码问题点
- 仍然存在多余输出:输入A后输出的空行会导致格式不符合判题要求,是答案错误的核心原因之一。
- 边界场景无输出:当输入不满足
A >= 1 && B >= 1 && A >= B的条件时,程序没有任何输出,不符合题目要求的必须输出结果的规则。 - 逻辑冗余:不需要单独判断
A % B == 0的分支,A - (A % B)本身就是符合要求的结果,余数为0时减0等价于直接输出A。 - 格式符适配问题:部分OJ的Linux编译环境中,
long long类型对应的输入输出格式符为%lld而非%lli,格式符不匹配也会导致读写值错误。
修复后参考代码
#include <stdio.h> int main() { long long A, B; scanf("%lld %lld", &A, &B); printf("%lld\n", A - (A % B)); return 0; }
若判题环境为Windows,可将格式符替换为%lli即可。
内容的提问来源于stack exchange,提问作者Aviral Mishra
相关产品推荐
相关产品推荐

