新手求问,更相减损术,死循环
程序代码:#include <stdio.h>
#include <math.h>
void main()
{
int a,b,t=0,i=0;
printf("请输入两个整数,以英文逗号相隔\n");
scanf("%d,%d",&a,&b);
while ((a%2==0) && (b%2==0))
{
a = a/2;
b = b/2;
i = i+1;
printf("%d,%d,%d\n",a,b,i);
}
while (a!=b)
{
if (b>a)
{
t = a;
a = b;
b = t;
}
a = a - b;
printf("%d,%d,%d\n",a,b,t);
}
a = a * pow(2,i);
printf("最大公约数为 %d\n",a);
}
求解为什么当我两个都输入偶数的时候就会陷入死循环,printf也只执行一次...另外在好奇一下为什么t不赋初值那a!=b的循环里第一次的t会是一个很大的数(每次一样),没赋值在内存里面是怎么样的?
另外chenwei435大大的那个代码我也看过int gy里最后一行return temp;是什么意思 另外这个是不是一旦gy被使用就会执行int gy里面的程序段...我是新手,在C程序设计里面也看过一个return的 貌似是比较大小的示例程序...
程序代码:
#include<stdio.h>
int gy(int x,int y)
{
int temp;
while(1)
{
temp=x-y;
if(y==temp)
{
break; /*如果减数和差相等就跳出循环*/
}
if(temp>y)
{
x=temp;
}
else
{
x=y;
y=temp;
}
}
return temp;
}
void main()
{
int a,b,t;
printf("请输入两个数:\n");
scanf("%d,%d",&a,&b);
if(a>b)
t=gy(a,b);
else
t=gy(b,a);
printf("最大公约数为:%d\n",t);
}








