void main()
{
int m,n,t;
m=15;
n=10;
if(m<n)
{
t=m;
m=n;
n=t;
}
int m0=m,n0=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
cout<<"最大公约数为:"<<m<<endl;
cout<<"最小公倍数为:"<<m0*n0/m<<endl;
}
请高手给“分析”此程序,不是给出输出结果。。。
16 个解决方案
#1
#include <iostream.h>
void main()
{
int m,n,t;
m=15;
n=10;
if(m <n) /*m小于n时交换两数,即m中始终存放两数中较大的*/
{
t=m;
m=n;
n=t;
}
int m0=m,n0=n;
while(n!=0) /*循环判断,m中存放最大公约数*/
{
t=m%n;
m=n;
n=t;
}
cout < <"最大公约数为:" < <m < <endl;
cout < <"最小公倍数为:" < <m0*n0/m < <endl; //通过找到的最大公约数,求最小公倍数
}
void main()
{
int m,n,t;
m=15;
n=10;
if(m <n) /*m小于n时交换两数,即m中始终存放两数中较大的*/
{
t=m;
m=n;
n=t;
}
int m0=m,n0=n;
while(n!=0) /*循环判断,m中存放最大公约数*/
{
t=m%n;
m=n;
n=t;
}
cout < <"最大公约数为:" < <m < <endl;
cout < <"最小公倍数为:" < <m0*n0/m < <endl; //通过找到的最大公约数,求最小公倍数
}
#2
这个要是看不懂的话就回去补习数学去
#3
你应该学会单步调试,不要一遇到这种问题就问人家分析过程,要自己会分析,这种问题教不来的,一千个问题有一千个问题的分析结果,所以你要学会自己单步调试。
单步调试会吗?设一个断点,按F10,一步步执行下去,必要的时候按F11跟进函数里面。
单步调试是作为程序员最基本的调试程序能力,分析程序如何运作,有那些潜在问题,很多时候都靠单步调试。
单步调试,会让你受益匪浅!
单步调试会吗?设一个断点,按F10,一步步执行下去,必要的时候按F11跟进函数里面。
单步调试是作为程序员最基本的调试程序能力,分析程序如何运作,有那些潜在问题,很多时候都靠单步调试。
单步调试,会让你受益匪浅!
#4
楼主好像发了好几个帖子哦!怎么?让大家帮你写注释吗?呵呵!
#5
有点儿过了哦!不要打击人家嘛,呵呵!楼主好好研究一下吧!动脑子的研究哦!不是看看就罢的哦!
#6
辗转相除法, 这是数学问题.
#7
while语句中是辗转相除法!
整数m,n,若m>n,m与n的最大公约数等于n与m%n的最大公约数;
若n=0,m与n的最大公约数等于m
整数m,n,若m>n,m与n的最大公约数等于n与m%n的最大公约数;
若n=0,m与n的最大公约数等于m
#8
我来写个lz能看懂的
int f1(int a,int b)//最大公约数
{
int i;
if (a>b)
c=b;
else c=a; //求a b中小的数
for (i=c;i>0;c--)
{
if(a%i==0&&b%i==0)
break;
}
return i;
}
}
如果楼主连这个都看不懂……那就==我白写了
int f1(int a,int b)//最大公约数
{
int i;
if (a>b)
c=b;
else c=a; //求a b中小的数
for (i=c;i>0;c--)
{
if(a%i==0&&b%i==0)
break;
}
return i;
}
}
如果楼主连这个都看不懂……那就==我白写了
#9
ls写的确实很费脑子……
#10
int f2(int a,int b)//最小公约数
{
int i;
if (a>b)
c=a;
else c=b; //求a b中大的数
for (i=c;i<=a*b;c++) //从大的书到a×b循环,因为a×b肯定是a和b的公倍数
{
if(i%a==0&&i%b==0)
break;
}
return i;
}
}
给分给分
{
int i;
if (a>b)
c=a;
else c=b; //求a b中大的数
for (i=c;i<=a*b;c++) //从大的书到a×b循环,因为a×b肯定是a和b的公倍数
{
if(i%a==0&&i%b==0)
break;
}
return i;
}
}
给分给分
#11
楼上的帅哥,告诉我你第5行里边的那个c是什么东西?
#12
辗转相除就行了。
#13
话说有一天。。。。。。要求个公约数,忘了辗除算法怎么实现了,自己把它推导了出来,想必楼主要的就是这个推导过程吧。
额,貌似我还真的又忘了这算法了,推一次给楼主看看吧。
首先,有两个数A和B(假定A大于B,反正你总能找出大的那个的),求出他们的差C,然后用B去除C,这里注意,如果B除C能除尽,假设得商为D,那么,A除C肯定等于D+1,就是说,C是A和B的公约数,那么是不是最大公约数呢?当然是的,如果A和B还存在一个比C更大的公约数E的话,那么,A和B的差C,肯定也要是E的倍数,但是E又大于C,相互矛盾,因此,如果B除C能除尽,C就是A和B的最大公约数。假如除不尽呢?下一步就是把待定数据变成B和C,找出B和C的最大公约数C1,因为A=B+C,所以A也是C1的倍数,即C1是A和B的约数,是不是最大公约数吗?当然是的,如果A和B存在一个比C1更大的公约数E1,那么A和B的差C也是E1的倍数,即E1是B和C的公约数,前面已经证明,C1是B和C的最大公约数,可是E1又是大于C1的约数,前后矛盾,所以,B和C的最大公约数C1,一定是A和B的最大公约数。
证明这两步以后,就是一个递归过程了,一步对,步步对的事。
至于最小公倍数=A*B/C,这种问题,我想用不着再解释吧,就是一个从二者的积中除去最大的重复值的过程。
不知道楼主看明白没有。
PS:建议3楼回家爬去,都什么跟什么啊,第一次看到有人拿单步调试当九阴真经卖弄的。
额,貌似我还真的又忘了这算法了,推一次给楼主看看吧。
首先,有两个数A和B(假定A大于B,反正你总能找出大的那个的),求出他们的差C,然后用B去除C,这里注意,如果B除C能除尽,假设得商为D,那么,A除C肯定等于D+1,就是说,C是A和B的公约数,那么是不是最大公约数呢?当然是的,如果A和B还存在一个比C更大的公约数E的话,那么,A和B的差C,肯定也要是E的倍数,但是E又大于C,相互矛盾,因此,如果B除C能除尽,C就是A和B的最大公约数。假如除不尽呢?下一步就是把待定数据变成B和C,找出B和C的最大公约数C1,因为A=B+C,所以A也是C1的倍数,即C1是A和B的约数,是不是最大公约数吗?当然是的,如果A和B存在一个比C1更大的公约数E1,那么A和B的差C也是E1的倍数,即E1是B和C的公约数,前面已经证明,C1是B和C的最大公约数,可是E1又是大于C1的约数,前后矛盾,所以,B和C的最大公约数C1,一定是A和B的最大公约数。
证明这两步以后,就是一个递归过程了,一步对,步步对的事。
至于最小公倍数=A*B/C,这种问题,我想用不着再解释吧,就是一个从二者的积中除去最大的重复值的过程。
不知道楼主看明白没有。
PS:建议3楼回家爬去,都什么跟什么啊,第一次看到有人拿单步调试当九阴真经卖弄的。
#14
回11楼的
忘记声明了而已
忘记声明了而已
#15
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int m,n,t;
cin>>m>>n;
int m0=m,n0=n;
if(n>m)
{
t=n;
n=m;
m=t;
}
while(t!=0)
{
t=abs(m-n);
m=n;
n=t;
}
cout<<"zui xiao gong yue shu shi:"<<m<<endl;
cout<<"zui da gong bei shu shi:"<<m0*n0/m<<endl;
}
各位请看下这个代码怎么样啊!
很不错的哦!!!
#include<cmath>
using namespace std;
void main()
{
int m,n,t;
cin>>m>>n;
int m0=m,n0=n;
if(n>m)
{
t=n;
n=m;
m=t;
}
while(t!=0)
{
t=abs(m-n);
m=n;
n=t;
}
cout<<"zui xiao gong yue shu shi:"<<m<<endl;
cout<<"zui da gong bei shu shi:"<<m0*n0/m<<endl;
}
各位请看下这个代码怎么样啊!
很不错的哦!!!
#16
话说,
int m0=m,n0=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
这个算法谁给解释下咩,还真是看不懂。为什么这个m就是最小公约数。。
int m0=m,n0=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
这个算法谁给解释下咩,还真是看不懂。为什么这个m就是最小公约数。。
#1
#include <iostream.h>
void main()
{
int m,n,t;
m=15;
n=10;
if(m <n) /*m小于n时交换两数,即m中始终存放两数中较大的*/
{
t=m;
m=n;
n=t;
}
int m0=m,n0=n;
while(n!=0) /*循环判断,m中存放最大公约数*/
{
t=m%n;
m=n;
n=t;
}
cout < <"最大公约数为:" < <m < <endl;
cout < <"最小公倍数为:" < <m0*n0/m < <endl; //通过找到的最大公约数,求最小公倍数
}
void main()
{
int m,n,t;
m=15;
n=10;
if(m <n) /*m小于n时交换两数,即m中始终存放两数中较大的*/
{
t=m;
m=n;
n=t;
}
int m0=m,n0=n;
while(n!=0) /*循环判断,m中存放最大公约数*/
{
t=m%n;
m=n;
n=t;
}
cout < <"最大公约数为:" < <m < <endl;
cout < <"最小公倍数为:" < <m0*n0/m < <endl; //通过找到的最大公约数,求最小公倍数
}
#2
这个要是看不懂的话就回去补习数学去
#3
你应该学会单步调试,不要一遇到这种问题就问人家分析过程,要自己会分析,这种问题教不来的,一千个问题有一千个问题的分析结果,所以你要学会自己单步调试。
单步调试会吗?设一个断点,按F10,一步步执行下去,必要的时候按F11跟进函数里面。
单步调试是作为程序员最基本的调试程序能力,分析程序如何运作,有那些潜在问题,很多时候都靠单步调试。
单步调试,会让你受益匪浅!
单步调试会吗?设一个断点,按F10,一步步执行下去,必要的时候按F11跟进函数里面。
单步调试是作为程序员最基本的调试程序能力,分析程序如何运作,有那些潜在问题,很多时候都靠单步调试。
单步调试,会让你受益匪浅!
#4
楼主好像发了好几个帖子哦!怎么?让大家帮你写注释吗?呵呵!
#5
有点儿过了哦!不要打击人家嘛,呵呵!楼主好好研究一下吧!动脑子的研究哦!不是看看就罢的哦!
#6
辗转相除法, 这是数学问题.
#7
while语句中是辗转相除法!
整数m,n,若m>n,m与n的最大公约数等于n与m%n的最大公约数;
若n=0,m与n的最大公约数等于m
整数m,n,若m>n,m与n的最大公约数等于n与m%n的最大公约数;
若n=0,m与n的最大公约数等于m
#8
我来写个lz能看懂的
int f1(int a,int b)//最大公约数
{
int i;
if (a>b)
c=b;
else c=a; //求a b中小的数
for (i=c;i>0;c--)
{
if(a%i==0&&b%i==0)
break;
}
return i;
}
}
如果楼主连这个都看不懂……那就==我白写了
int f1(int a,int b)//最大公约数
{
int i;
if (a>b)
c=b;
else c=a; //求a b中小的数
for (i=c;i>0;c--)
{
if(a%i==0&&b%i==0)
break;
}
return i;
}
}
如果楼主连这个都看不懂……那就==我白写了
#9
ls写的确实很费脑子……
#10
int f2(int a,int b)//最小公约数
{
int i;
if (a>b)
c=a;
else c=b; //求a b中大的数
for (i=c;i<=a*b;c++) //从大的书到a×b循环,因为a×b肯定是a和b的公倍数
{
if(i%a==0&&i%b==0)
break;
}
return i;
}
}
给分给分
{
int i;
if (a>b)
c=a;
else c=b; //求a b中大的数
for (i=c;i<=a*b;c++) //从大的书到a×b循环,因为a×b肯定是a和b的公倍数
{
if(i%a==0&&i%b==0)
break;
}
return i;
}
}
给分给分
#11
楼上的帅哥,告诉我你第5行里边的那个c是什么东西?
#12
辗转相除就行了。
#13
话说有一天。。。。。。要求个公约数,忘了辗除算法怎么实现了,自己把它推导了出来,想必楼主要的就是这个推导过程吧。
额,貌似我还真的又忘了这算法了,推一次给楼主看看吧。
首先,有两个数A和B(假定A大于B,反正你总能找出大的那个的),求出他们的差C,然后用B去除C,这里注意,如果B除C能除尽,假设得商为D,那么,A除C肯定等于D+1,就是说,C是A和B的公约数,那么是不是最大公约数呢?当然是的,如果A和B还存在一个比C更大的公约数E的话,那么,A和B的差C,肯定也要是E的倍数,但是E又大于C,相互矛盾,因此,如果B除C能除尽,C就是A和B的最大公约数。假如除不尽呢?下一步就是把待定数据变成B和C,找出B和C的最大公约数C1,因为A=B+C,所以A也是C1的倍数,即C1是A和B的约数,是不是最大公约数吗?当然是的,如果A和B存在一个比C1更大的公约数E1,那么A和B的差C也是E1的倍数,即E1是B和C的公约数,前面已经证明,C1是B和C的最大公约数,可是E1又是大于C1的约数,前后矛盾,所以,B和C的最大公约数C1,一定是A和B的最大公约数。
证明这两步以后,就是一个递归过程了,一步对,步步对的事。
至于最小公倍数=A*B/C,这种问题,我想用不着再解释吧,就是一个从二者的积中除去最大的重复值的过程。
不知道楼主看明白没有。
PS:建议3楼回家爬去,都什么跟什么啊,第一次看到有人拿单步调试当九阴真经卖弄的。
额,貌似我还真的又忘了这算法了,推一次给楼主看看吧。
首先,有两个数A和B(假定A大于B,反正你总能找出大的那个的),求出他们的差C,然后用B去除C,这里注意,如果B除C能除尽,假设得商为D,那么,A除C肯定等于D+1,就是说,C是A和B的公约数,那么是不是最大公约数呢?当然是的,如果A和B还存在一个比C更大的公约数E的话,那么,A和B的差C,肯定也要是E的倍数,但是E又大于C,相互矛盾,因此,如果B除C能除尽,C就是A和B的最大公约数。假如除不尽呢?下一步就是把待定数据变成B和C,找出B和C的最大公约数C1,因为A=B+C,所以A也是C1的倍数,即C1是A和B的约数,是不是最大公约数吗?当然是的,如果A和B存在一个比C1更大的公约数E1,那么A和B的差C也是E1的倍数,即E1是B和C的公约数,前面已经证明,C1是B和C的最大公约数,可是E1又是大于C1的约数,前后矛盾,所以,B和C的最大公约数C1,一定是A和B的最大公约数。
证明这两步以后,就是一个递归过程了,一步对,步步对的事。
至于最小公倍数=A*B/C,这种问题,我想用不着再解释吧,就是一个从二者的积中除去最大的重复值的过程。
不知道楼主看明白没有。
PS:建议3楼回家爬去,都什么跟什么啊,第一次看到有人拿单步调试当九阴真经卖弄的。
#14
回11楼的
忘记声明了而已
忘记声明了而已
#15
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int m,n,t;
cin>>m>>n;
int m0=m,n0=n;
if(n>m)
{
t=n;
n=m;
m=t;
}
while(t!=0)
{
t=abs(m-n);
m=n;
n=t;
}
cout<<"zui xiao gong yue shu shi:"<<m<<endl;
cout<<"zui da gong bei shu shi:"<<m0*n0/m<<endl;
}
各位请看下这个代码怎么样啊!
很不错的哦!!!
#include<cmath>
using namespace std;
void main()
{
int m,n,t;
cin>>m>>n;
int m0=m,n0=n;
if(n>m)
{
t=n;
n=m;
m=t;
}
while(t!=0)
{
t=abs(m-n);
m=n;
n=t;
}
cout<<"zui xiao gong yue shu shi:"<<m<<endl;
cout<<"zui da gong bei shu shi:"<<m0*n0/m<<endl;
}
各位请看下这个代码怎么样啊!
很不错的哦!!!
#16
话说,
int m0=m,n0=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
这个算法谁给解释下咩,还真是看不懂。为什么这个m就是最小公约数。。
int m0=m,n0=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
这个算法谁给解释下咩,还真是看不懂。为什么这个m就是最小公约数。。