求两个数的最大公约数,最小公倍数。
求最大公约数的方法很多,本人目前水平有限掌握的是一种最常用的辗转相除法。
求最大公约数
#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
害 我一个大学生 哈哈哈哈哈哈哈
一早上啥也没干 自己找百度补了一下数学知识
头大 丢脸。