主题:求最大公约数 我出错了!求高手帮忙
ws416464515
[专家分:0] 发布于 2010-05-03 12:29:00
输入两个数,求他们的最大公约数。我写的程序如下:
#include<stdio.h>
void main()
{
int n,m,max,min,t;
scanf("%d %d",&n,&m);
if(n>m) max=n,min=m;
else max=m,min=n;
while(t!=0)
{
t=max%min; \使用辗转相除\
max=min;
min=t;
}
printf("它们的最大公约数为%d\n",min);
}
输出不对 程序能运行 高人帮帮我,我刚刚学C 还是一个非常小白!
回复列表 (共20个回复)
沙发
ws416464515 [专家分:0] 发布于 2010-05-03 12:42:00
高手们 你们就用我的这个编程思想帮我改一下 让我彻彻底底的明白我错在在哪里了!谢谢了!!!
---------------------------------
===========================================菜鸟在进化~~~~~~~~~谢谢各位支持
板凳
彼岸之歌 [专家分:50] 发布于 2010-05-03 13:08:00
菜鸟路过···
你的循环是以t=0结束的,那么最后,因为你循环体里的赋值语句 “min=t;”,min的值总是0的···
3 楼
雪光风剑 [专家分:27190] 发布于 2010-05-03 13:10:00
把计算的顺序调整一下,把赋值放在求余前面
4 楼
ws416464515 [专家分:0] 发布于 2010-05-03 13:26:00
[quote]把计算的顺序调整一下,把赋值放在求余前面[/qu
也不行啊 我输入24 18 输出是2 我输入4 8 输出是-4 不真的是什么原因
还往高手解答!
5 楼
彼岸之歌 [专家分:50] 发布于 2010-05-03 13:50:00
嗯,我说一下吧···虽然我也是新手
首先,我调试时发现,我输入9和6时,你那个循环里的条件“t>=0”会导致无限循环。这是一点,所以我把它改成了"t>0"。
其次,那个min的问题,我用了一个比较笨的方法(应该还有更好的方法吧),我改成了这样
if(t) min=t;
就是加了一个条件而已。
嗯,我也是新手···一起加油哦,呵呵。
6 楼
ws416464515 [专家分:0] 发布于 2010-05-03 14:24:00
新手对新手 能不能把你改的发上来! 我并没有t>0的循环条件啊
我按你的方法改了
还是不行
把你的发上来我对比一下
7 楼
ws416464515 [专家分:0] 发布于 2010-05-03 14:24:00
新手对新手 能不能把你改的发上来! 我并没有t>0的循环条件啊
我按你的方法改了
还是不行
把你的发上来我对比一下
8 楼
彼岸之歌 [专家分:50] 发布于 2010-05-03 14:26:00
哦,不好意思,我记错了,囧,这是我改过后的
#include<stdio.h>
void main()
{
int n,m,max,min,t=1;
scanf("%d %d",&n,&m);
if(n>m) max=n,min=m;
else max=m,min=n;
while(t>0)
{
t=max%min;
max=min;
if(t) min=t;
}
printf("它们的最大公约数为%d\n",min);
}
[em8][em8][em8][em8][em8]
9 楼
lixing8345 [专家分:40] 发布于 2010-05-03 17:45:00
#include<stdio.h>
void main()
{
int n,m,t,temp;
scanf("%d,%d",&n,&m);
if(n<m){n=m;m=n;}
t=n%m;
do{n=m;
m=t;
t=n%m;
}while(t!=0);
printf("它们的最大公约数为%d\n",m);
}
t要初始化
10 楼
shangyangzi [专家分:30] 发布于 2010-05-03 19:01:00
简化后的程序如下:
#include<stdio.h>
void main()
{
int n,m,t;
scanf("%d %d",&n,&m);
while(m!=0)
{
t=n%m; //使用辗转相除
n=m;
m=t;
}
printf("它们的最大公约数为%d\n",n);
}
我来回复