#include<stdio.h>int gcd(int a, int b){ int x; for(x=a;x>0;x--) { if(a%x==0&&b%x==0) return x; }}int lcm(int a, int b){ int i,t,y=1,min,max; if(a>b) min=b,max=a; else min=a,max=b; t=min; if(min==1) return max; if(min==2) { if(max%2==0) return max; else return 2max; } else { for(i=2;i<=min/2;i++) { if(min%i==0&&max%i==0) { min=min/i; max=max/i; y=i; } } y=yminmax; } return y;}int main(){ int n, m, gys, gbs; int gcd(int a, int b); int lcm(int a, int b); scanf("%d%d", &n, &m); gys= gcd(n, m); gbs= lcm(n, m); printf("%d %d\n", gys, gbs); return 0;}
2条回答 默认 最新
社区专家-Monster-XH 2023-11-09 11:04关注在 lcm 函数中有一个错误,return 2max; 这行代码应该是 return 2*max
#include <stdio.h> int gcd(int a, int b) { int x; for (x = a; x > 0; x--) { if (a % x == 0 && b % x == 0) return x; } return 1; // 应该有一个返回值以处理所有情况,比如 a 和 b 都是质数 } int lcm(int a, int b) { int max = (a > b) ? a : b; int min = (a > b) ? b : a; if (min == 1) return max; int i, y = 1; for (i = 2; i <= min / 2; i++) { if (min % i == 0 && max % i == 0) { min = min / i; max = max / i; y = y * i; // 应该是累乘 i } } return y * min * max; } int main() { int n, m, gys, gbs; scanf("%d%d", &n, &m); gys = gcd(n, m); gbs = lcm(n, m); printf("%d %d\n", gys, gbs); return 0; }解决 无用评论 打赏 举报