c - 找到最大可能的除数
问题描述
我正在尝试用 C 编写代码,其中我声明了两个变量 A、B 和 A>=B,
给定两个整数 A 和 B,找出能被 B 整除的最大数 ≤A。在单独的一行中打印出小于或等于 A 且能被 B 整除的最大整数。
我试图解决,但由于运行时错误,该解决方案没有被接受。代码是
#include <stdio.h>
int main(void) {
long long A, B, flag = 1;
scanf("%lli", &A);
printf("\n");
scanf("%lli", &B);
for(int i = 1; i <= A; i++)
{
while(B > 0)
{
if(i % B == 0)
flag = i;
}
}
printf("%lli\n", flag);
return 0;
}
所以然后我用另一种方法去
#include <stdio.h>
int main() {
long long A, B, n;
scanf("%lli", &A);
printf("\n");
scanf("%lli", &B);
if(A >= 1 && B >= 1 && A >= B)
{
n = A % B;
if(A % B == 0)
printf("%lli\n", A);
else
printf("%lli\n", A - n);
}
return 0;
}
但在这里它根本不接受显示错误答案的代码。
我不知道我在哪里出错,尽管这些程序是在 VS CODE 上运行的。
解决方案
1.运行时错误可能是你使用了不兼容的类型:
long long A, B, flag = 1;
....
for(int i = 1; i <= A; i++)
的long long
类型A
可能比的int
类型具有更大的范围i
。如果是这样,您的循环变量i
可能永远不会达到A
. 而且你不知道当循环到达时会发生什么i==INT_MAX
。很可能i
会返回一个很大的负值,它仍然小于A
,并且循环将永远迭代——因此达到时间限制并且程序被中止。
如果输入值小于INT_MAX
,则不会发生这种情况,显然是这种情况。(但是,约束应该在问题中给出,而不是在下面的评论中。)
2.主要问题是@pmg 在评论while(B > 0) {...}
中指出的无限循环。循环体不会修改,因此循环条件一旦被验证,就会永远保持真实。B
3.自动验证问题的另一个来源可能是输出格式,正如@Zilog80 在此处指出的那样。从代码中删除不必要printf("\n");
的指令。
4.顺便说一句,这里根本不需要循环。B
整数除法给出截断的结果,因此不大于A
(均为正)的最大倍数很简单:
A / B * B
推荐阅读
- java - Java 对具有重复元素的集合进行排序。如果重复,按出现顺序排序
- ios - 每次加载应用程序时如何使用照片库 ios 中的照片?
- javascript - 如何在向导中编辑表单并将其状态保存为向导
- php - 具有无休止的解析语法错误的 WordPress 网站
- parsing - LALR 解析器比递归下降解析器慢
- python - 从其他 2 列的值创建新的数据框列
- sql-server-2005 - 无法将应用程序连接到 Microsoft SQL Server
- php - PHP 站点在 localhost:8000 上运行正确,但在 XAMPP 或其他服务器上出现错误。如何创建.htaccess?
- javascript - 在一个史诗 RXJS 中调用另一个史诗
- wordpress - 在 dokan 插件上隐藏访问者的供应商信息