nyoj题目40:公约数和公倍数
来源:互联网 发布:什么是双向数据绑定 编辑:程序博客网 时间:2024/04/27 05:01
公约数和公倍数
- 描述
- 小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
- 输入
- 第一行输入一个整数n(0<n<=10000),表示有n组测试数据;
随后的n行输入两个整数i,j(0<i,j<=32767)。 - 输出
- 输出每组测试数据的最大公约数和最小公倍数
- 样例输入
36 612 1133 22
- 样例输出
6 61 13211 66
#include <stdio.h>
int main ()
{
int n, i, j, a, b, m;
scanf ("%d", &n);
while (n--)
{
scanf ("%d%d", &i, &j);
if (i < j)
{
m = i;
i = j;
j = m;
} //将大小数排列后用于下头的for循环
for (a = j + 1; a--; a < j) //运算时a--为减一,则输出时不包括i本身,故a = j + 1
{
if (i % a == 0 && j % a == 0)
{
printf("%d ", a); break; //设置循环来求公约数
}
}
printf ("%d\n", i * j / a); //当得知公约数的时候,公倍数等于两个原数相乘后除以公约数。
}
return 0;
}
错误一
刚开始在for循环那里写成了a < j || a < i;想判断两个都成立,但忘了这样的输出恒为1或0.
错误二
在求公倍数的时候用的方法不对,但自己一直以为公倍数的求错了,实际上是错误一导致的,自己百度后发现了i * j / a的用法。不然自己还是用一堆方程式表示。
优秀代码。
01.#include<stdio.h>
02.
int
main()
03.
{
04.
unsigned
int
u,v,r,s,i,d;
05.
scanf
(
"%u"
,&s);
06.
for
(i=1;i<=s;i++)
07.
{
08.
scanf
(
"%u%u"
,&u,&v);
09.
d=u*v;
10.
while
(v!=0)
11.
{
12.
r=u%v;
13.
u=v;
14.
v=r;
15.
}
16.
printf
(
"%u %u\n"
,u,d/u);
17.
}
18.
return
0;
19.
}
while看不懂,百度去。
- NYOJ 题目40 公约数和公倍数
- nyoj题目40:公约数和公倍数
- NYOJ:题目40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- NYOJ-公约数和公倍数 -40
- NYOJ-40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- nyoj-40-公约数和公倍数
- NYOJ 40 公约数和公倍数
- nyoj 40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- nyoj 40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- NYOJ--40--公约数和公倍数
- NYOJ 40 公约数和公倍数
- NYOJ 40 公约数和公倍数
- 【NYOJ】[40]公约数和公倍数
- Java空指针异常
- ligerUI总结—— grid表格(基础篇)
- Lucene.NET学习笔记(2)
- Lucene.NET学习笔记(3)
- JQuery弹窗的使用
- nyoj题目40:公约数和公倍数
- ModSecurity Performance Recommendations
- ligerUI Tab标签操作实例
- mysql-06-数据库的备份和还原
- SQL 近期问题总结
- JQuery解析JSON
- ligerUI 表单中使用下拉框
- 测试hadoop安装成功与失败
- ligerGrid中的detail明细属性