c - 在 C 中找到两个没有的 LCM
问题描述
我创建了一个代码来查找两个没有的 LCM。我认为代码是正确的,但我有一个不想要的输出。这段代码有什么问题?
#include<stdio.h>
#include<conio.h>
main()
{
int i, j, a, b, lcm;
printf("Enter two nos : ");
scanf("%d %d", &a, &b);
for(i=1; i<=b; i++)
{
for(j=1; j<=a; j++)
{
if(a*i==b*j)
{
lcm=a*i;
break;
}
}
}
printf("LCM=%d", lcm);
getch();
}
解决方案
两个数字 a,b 的 LCM 至少为 max(a,b) 且最多为 a*b,因此您对边界的第一个想法是正确的。但是,如果您仔细查看 LCM(两个正整数) a 和 b 的定义之一,您会发现 LCM 是最小的数,使得 LCM % a = 0 和 LCM % b = 0 其中“% " 表示“整数除法的余数,截断”,这正是您可以在这里使用的。
例子:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b, lcm;
printf("Enter two nos : ");
scanf("%d %d", &a, &b);
/* TODO: checks and balances! */
/* Set lcm to the larger of the two numbers */
lcm = (a < b) ? b : a;
/* check if both "a" and "b" divide "lcm" without a remainder
* otherwise increment "lcm" */
for (;;) {
if ((lcm % a == 0) && (lcm % b == 0)) {
/* we got the LCM, break out of loop */
break;
}
/* Otherwise increment "lcm" by one */
lcm++;
}
printf("LCM = %d\n", lcm);
exit(EXIT_SUCCESS);
}
还有更优雅和更通用的方法,但我认为上面的例子很容易理解。
推荐阅读
- android - 在android的日历视图中禁用特定日期
- angular - 从测试中选择 html 模板变量
- sql - SQL - 如何从多个表中获取值而不会模棱两可
- javascript - 创建重定向对象时触发函数
- python - 为列表中的每个项目查找最常关联的项目
- flutter - 如何将注意力集中在屏幕中的一个文本字段上,而不是让它转移到另一个小部件?
- jquery - 水平到垂直导航保存 cookie 中的更改
- r - R中的字符串缩写技术
- javascript - 加载更多内容 div 并在“加载更多”按钮处停止页面
- python - Alfresco 基本身份验证适用于 curl 但不适用于 python