yahyah625 2020-11-21 17:30 采纳率: 0%
浏览 20

c++求助 想问一下我写的辗转相除法的函数有什么问题,代码没报错但是循环跑不了?

#include<iostream>
using namespace std;
//求两个整数的最大公倍数

int maxdivisor(int x, int y)
{
	int t = 0 ;
	while (t != 0)
	{
		t = x % y;
		x = y;
		y = t;
	}//辗转相除法求最大公约数
	return x;
}

int main()
{
	cout << "请输入两个整数:" << '\n';
	int m, n;
	int t , i;//交换大小
	cin >> m >> n;
	t = m > n ? m : n;
	i = m > n ? n : m;
	m = t;
	n = i;
	int minmultiple;
	minmultiple = m * n / maxdivisor(m, n);
	cout << "m、n的最小公倍数为:" << minmultiple;
	return 0;
  • 写回答

1条回答 默认 最新

  • 芣苢的成长之路 2023-06-27 10:42
    关注

    求最大公约数的循环条件存在问题,导致循环无法执行。修正后的代码中,将辗转相除法的循环条件修改为y != 0,这样循环会一直执行,直到找到最大公约数。之前的循环条件t != 0导致循环无法执行,因为在进入循环之前,t的初始值为0,因此循环条件不满足,循环直接跳过。修正后的代码应该能够正确计算两个整数的最小公倍数。

    
    #include <iostream>
    using namespace std;
    
    // 求两个整数的最大公约数
    int maxdivisor(int x, int y) {
        int t = 0;
        while (y != 0) {
            t = x % y;
            x = y;
            y = t;
        }
        return x;
    }
    
    int main() {
        cout << "请输入两个整数:" << '\n';
        int m, n;
        int t, i;  // 交换大小
        cin >> m >> n;
        t = m > n ? m : n;
        i = m > n ? n : m;
        m = t;
        n = i;
        int minmultiple;
        minmultiple = m * n / maxdivisor(m, n);
        cout << "m、n的最小公倍数为:" << minmultiple;
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 如图所示交换机网络该如何规划配置
  • ¥15 CUDA driver error
  • ¥15 Dijkstra 算法的堆优化方法
  • ¥15 师哥师姐们,如何帮我下载一下python?
  • ¥15 Office版本升级,Oracle连接报错
  • ¥20 利用python搜索PDF文件中是否存在1
  • ¥15 ImportPathMismatchError
  • ¥15 滤波器这个效果是对的么
  • ¥15 c++静态函数的静态函数参数问题
  • ¥15 51单片机数码管显示有问题