求两个数的最大公约数,最小公倍数。

求两个数的最大公约数,最小公倍数。

求最大公约数的方法很多,本人目前水平有限掌握的是一种最常用的辗转相除法。

求最大公约数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 0; int b = 0; int c = 0;
	scanf("%d%d", &a, &b);
	printf("a=%d,b=%d\n", a, b);
	//辗转相除法求最大公约数
	while(a%b)
	{
		c = a%b;
		a = b;
		b = c;

	}
	printf("a和b的最大公约数=%d\n", b);
	system("pause");
	return 0;
}

在这里插入图片描述
关于判断条件的说明

if (a%b)
{
c = a%b;
a = b;
b = c;
}
也可以用以下写法

if (c=a%b)
	{
		a = b;
		b = c;
	}
如果a%b的值等于0 赋值给c则 c = 0 为假 循环就停止了。
这样程序会更简单一些。

最小公倍数
最小公倍数=两整数的乘积÷最大公约数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 0; int b = 0; int c = 0; int temp = 0;
	scanf("%d%d", &a, &b);
	printf("a=%d,b=%d\n", a, b);
    c = a*b;
    while (temp = a%b)
	{
		a = b;
		b = temp;
	}
	printf("最小公倍数=%d", c/b);
   system("pause");
	return 0;

在这里插入图片描述

最后

哈哈哈哈哈 昨天的博客写到测试的时候要测试全面。心血来潮想着那就试试呗,用负数测试了一波

刚开始用 if做的条件
本来用24 和18
换成5和3 就不行了
if只能用一次
刚好24 18 的余数6就是公约
if和while不同点是,if后的语句只执行一次,while则会循环执行,直到出现while后的条件成才退出。
用3 和0 做测试
然后出现了个这
0x00B03D64 处有未经处理的异常(在 test-2-7.c.exe 中): 0xC0000094: Integer division by zero。
大概意思就是 除数不能是0
害 我一个大学生 哈哈哈哈哈哈哈
一早上啥也没干 自己找百度补了一下数学知识
头大 丢脸。

发布了22 篇原创文章 · 获赞 5 · 访问量 3215

猜你喜欢

转载自blog.csdn.net/weixin_45271990/article/details/104206359
今日推荐