我的LCM计划结果出错了。
ifirst找到数字的gcd然后用gcd划分产品。
int gcd(int x, int y)
{
while(y != 0)
{
int save = y;
y = x % y;
x = save;
}
return y;
}
int lcm(int x, int y)
{
int prod = x * y;
int Gcd = gcd(x,y);
int lcm = prod / Gcd;
return lcm;
}
任何帮助都非常感激。
答案 0 :(得分:5)
您的gcd
函数将始终返回0
。变化
return y;
到
return x;
了解欧几里得的算法:
RULE 1: gcd(x,0) = x
RULE 2: gcd(x,y) = gcd(y,x % y)
考虑x = 12
和y = 18
gcd (12, 18)
= gcd (18, 12) Using rule 2
= gcd (12,6) Using rule 2
= gcd (6, 0) Using rule 1
= 6
正如您所看到的,当y
变为零时x
将成为gcd
,因此您需要返回x
而不是y
。
同样在计算lcm时,您将首先乘以可能导致溢出的数字。相反,你可以这样做:
lcm = x * (y / gcd(x,y))
但如果lcm
不适合int
,则必须long long
答案 1 :(得分:4)
问题1)int gcd = gcd(x,y);
gcd
已被定义为函数。您无法定义具有相同名称的变量。
问题2)在return y
中将return x
更改为gcd()
,否则每次都会返回0。
问题3)如果x * y
和x
很大,y
可能会溢出。
答案 2 :(得分:0)
你应该在你的gcd函数中返回x而不是y。
此外,您确定x * y产品将始终适合int
吗?也可以使用long long
作为一个好主意。
答案 3 :(得分:0)
#include <iostream>
using namespace std;
long long gcd(long long int a, long long int b){
if(b==0)
return a;
return gcd(b,a%b);
}
long long lcm(long long a,long long b){
if(a>b)
return (a/gcd(a,b))*b;
else
return (b/gcd(a,b))*a;
}
int main(){
long long int a ,b ;
cin>>a>>b;
cout<<lcm(a,b)<<endl;
return 0;
}
答案 4 :(得分:0)
此C程序是查找LCM的不同方法
#include<stdio.h>
int main()
{
int a,b,lcm=1,i=2;
printf("Enter two numbers to find LCM\n" );
scanf("%d %d",&a ,&b);
while(i <= a*b)
{
if(a%i==0 & b%i==0)
{
lcm=lcm*i;
a=a/i;
b=b/i;
i=i-1;
}
if( a%i==0 & b%i!=0)
{
lcm=lcm*i;
a=a/i;
i=i-1;
}
if( b%i==0 & a%i!=0)
{
lcm=lcm*i;
b=b/i;
i=i-1;
}
i++;
}
printf("The LCM of numbers is %d\n", lcm);
}
答案 5 :(得分:0)
1. While 循环
代码:
#include <stdio.h>
int main() {
int x, y, res;
printf("Enter two positive integers: ");
scanf("%d %d", &x, &y);
res = (x > y) ? x : y;
while (1) {
if (res % x == 0 && res % y == 0) {
printf("The LCM obtained from %d and %d is %d.", x, y, res);
break;
}
++res;
}
return 0;
}
输出:
Enter two positive integers: 7
35
The LCM obtained from 7 and 35 is 35.
2.功能
代码:
#include <stdio.h>
int findLCM(int x, int y, int res);
int main()
{
int x, y, res;
printf (" \n Enter two positive integers: ");
scanf ("%d %d", &x, &y);
res = (x > y) ? x : y;
int lcm=findLCM(x,y,res);
printf ( " \n The LCM obtained from %d and %d is %d. ", x, y, res);
return 0;
}
int findLCM ( int x, int y, int res)
{
while (1) {
if (res % x == 0 && res % y == 0) {
return res;
break;
}
else{++res;}
}
}
输出:
Enter two positive integers: 7
35
The LCM obtained from 7 and 35 is 35.
参考:Scaler 主题