这一会是跟二进制杠上了,这也算是个模板,不长不短的,搁在这儿了。
#include<stdio.h>
#include<iostream>
using namespace std;
inline int GCD(int x,int y){
int i,j;
if(x==0)return y;
if(y==0)return x;
for(j=0;0==(x&1);++i) x>>=1; //去掉所以的2
for(j=0;0==(y&1);++j) y>>=1; //去掉所有的2
if(j<i) i=j;
while(1){
if(x<y) x^=y,y^=x,x^=y; //若x<y交换x,y
if(0==(x-=y)) return y<<i;
//若x==y,gcd==x==y(就是在辗转相减,while(1)控制)
while(0==(x&1))x>>=1; //去掉所有的2
}
}
int main(){
int x,y;
while(1){
cin>>x>>y;
cout<<GCD(x,y)<<endl;
}
return 0;
}
代码牛皮*:
#include<stdio.h>
#include<iostream>
using namespace std;
//递归输出二进制函数
void BinaryRecursion(int n)
{
int a;
a=n%2;
n=n>>1;
if (n==0);
else
BinaryRecursion(n);
cout<<a;
}
inline int GCD(int x,int y){
cout<<" ----------"<<endl;
cout<<" x="<<x<<" y="<<y<<endl;
int i,j;
if(x==0)return y;
if(y==0)return x;
cout<<" x去掉2之前="<<x<<" 二进制形式=";BinaryRecursion(x);cout<<endl;
for(j=0;0==(x&1);++i) x>>=1; //去掉所以的2
cout<<" x去掉2之后="<<x<<" 二进制形式=";BinaryRecursion(x);cout<<endl;
cout<<" y去掉2之前="<<y<<" 二进制形式=";BinaryRecursion(y);cout<<endl;
for(j=0;0==(y&1);++j) y>>=1; //去掉所有的2
cout<<" y去掉2之后="<<y<<" 二进制形式=";BinaryRecursion(y);cout<<endl;
cout<<" i="<<i<<endl;
cout<<" j="<<j<<endl;
if(j<i) i=j;
while(1){
cout<<" ==========="<<endl;
cout<<" x="<<x<<" y="<<y<<endl;
if(x<y) x^=y,y^=x,x^=y; //若x<y交换x,y
if(0==(x-=y)) {
cout<<"y<<"<<i<<"="<<(y<<i)<<endl;
return y<<i;
}
//若x==y,gcd==x==y(就是在辗转相减,while(1)控制)
while(0==(x&1))x>>=1; //去掉所有的2
}
}
int main(){
int x,y;
while(1){
cin>>x>>y;
cout<<GCD(x,y)<<endl;
}
return 0;
}
运行结果:
更详细的解释找它https://blog.csdn.net/sodacoco/article/details/81623876,不想再粘过来捏。。