C语言求余运算
【例题】输入两个正整数m和m.输出这两个数的最大公约数和最小公倍数。我先写了一个求最大公约数,有了最大公约数才求得到最小公倍数。但是我先把求公约数的程序写出来之后,运行起...
【例题】输入两个正整数m和m.输出这两个数的最大公约数和最小公倍数。我先写了一个求最大公约数,有了最大公约数才求得到最小公倍数。但是我先把求公约数的程序写出来之后,运行起来有问题。程序如下。#include<stdio.h>
void main()
{
int m,n,k;
scanf("%d,%d",&m,&n);
if(m>=n)
k=n-1;
else
k=m-1;
for(;k!=0;k--)
{
if(m%k==0&&n%k==0)
printf("%d",k);
break;
}
printf("\n");
}
//求m和n的最大公约数,我想的是。将最小的那个数赋给k,然后k-1,是为了防止两个相同的数被自身整除。执行for语言,当m和n能同时被k整除的时候,输出k的值,然后执行break结束for循环,如果不能被整除再继续k--。
//现在这个程序有两个问题:
//(1)这个break的位置好像放错了,输入结果后,程序不会显示任何结果。
//(2)取掉之后,可以运行出结果。但是结果是错误的结果。
//(3)因为有 k-1 但是,输入两个相同的数之后,结果更是错得离谱。
//希望大家帮我指导一下这3个问题。 展开
void main()
{
int m,n,k;
scanf("%d,%d",&m,&n);
if(m>=n)
k=n-1;
else
k=m-1;
for(;k!=0;k--)
{
if(m%k==0&&n%k==0)
printf("%d",k);
break;
}
printf("\n");
}
//求m和n的最大公约数,我想的是。将最小的那个数赋给k,然后k-1,是为了防止两个相同的数被自身整除。执行for语言,当m和n能同时被k整除的时候,输出k的值,然后执行break结束for循环,如果不能被整除再继续k--。
//现在这个程序有两个问题:
//(1)这个break的位置好像放错了,输入结果后,程序不会显示任何结果。
//(2)取掉之后,可以运行出结果。但是结果是错误的结果。
//(3)因为有 k-1 但是,输入两个相同的数之后,结果更是错得离谱。
//希望大家帮我指导一下这3个问题。 展开
2013-12-05
展开全部
(1)break的位置没错,(2)k=n-1;这步操作是不必要的。 但关键问题是,你的这种算法是片面的,不能求出所有数的最大公约数。应用辗转相除法,举例如下,可自行编程练习。 辗转相除法.
当两个数都较大时,采用辗转相除法比较方便.其方法是:
以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
例如:求4453和5767的最大公约数时,可作如下除法.
5767÷4453=1余1314
4453÷1314=3余511
1314÷511=2余292
511÷292=1余219
292÷219=1余73
219÷73=3
于是得知,5767和4453的最大公约数是73.
辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.
当两个数都较大时,采用辗转相除法比较方便.其方法是:
以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
例如:求4453和5767的最大公约数时,可作如下除法.
5767÷4453=1余1314
4453÷1314=3余511
1314÷511=2余292
511÷292=1余219
292÷219=1余73
219÷73=3
于是得知,5767和4453的最大公约数是73.
辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.
2013-12-05
展开全部
我个人认为求余运算还是很有用的。。。至于你说运用在哪一方面就要视实际情况而定了。。。给你举几个列子把。。。比如狼追兔子的问题:有十个洞成一个圆形,兔子躲在某一个洞中,狼从第一个洞去找,没找到的话就隔一个洞去第3个洞找,再找不到就隔2个去第6个洞找,依次类推,每次隔的洞都加1,最后狼无论找多久都找不到兔子。请问兔子在第几个洞。。。这个问题就是很典型的运用求余运算。知识不是一定支能用在某一方面,,,要发散 还是不太明白。。。取模运算只是一种算法,不就是求余数吗?这不就是它的用途吗 这是因为在计算机的基础科目 离散数学里面求于运算就是被叫做取模运算,这是历史原因。如果你学计算机的话就会遇到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |