c++用辗转相减法求两个正数m和n的最大公约数

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:45:22
#include"iostream.h"
void main()
{
int m,n;int t,r=m-n;
while(m-n!=0)
if(m>n)
m=n;n=r;
else
t=m;m=n;n=t;
cout<<"gcd(m.n)="<<m<<endl;
}
我不知道出了什么问题,说我有一个错误,可是我又不知道为什么,说我有非法的else,应该怎样改?

1,if 或者 else 包含多个语句需要使用{}括起来。
2,你的算法有小问题
3,m,n没有初始化
修改结果如下:
#include"iostream.h"
void main()
{
int m=45,n=60;int t,r=m-n;
while(m-n!=0)
if(m>n)
{
r=m-n;m=n;n=r;
}
else
{
t=m;m=n;n=t;
}
cout<<"gcd(m.n)="<<m<<endl;
}

格式有错,改正如下:
#include"iostream.h"
void main()
{
int m,n;int t,r=m-n;
while(m-n!=0)

if(m>n)
{m=n;n=r;} /*这一定要加{}*/
else
{t=m;m=n;n=t;} /*这一定要加{}*/

cout<<"gcd(m.n)="<<m<<endl;
}

另外...总觉得还有点不对,建议用如下写法:
#include <iostream>
int main()
{
int m,n;
int t,r=m-n;
while(m-n!=0)
{
if(m>n){
m=n;n=r;}
else{
t=m;m=n;n=t;}
}
std::cout << "gcd(m,n)" << m << std::endl;
system("pause");
return 0;