新手求问,更相减损术,死循环
程序代码:
#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); }