#include<iostream>
using namespace std;
struct gcd{
long long int r,s,d; //这里使用结构体方便返回数据体
gcd(long long int a,long long int b);
~gcd(){}
friend ostream& operator<<(ostream &os,const gcd &num);
};
void Swap(long long int &a,long long int &b){ //这个针对算法单独设计了多次使用的函数
long long int temp=0;
temp=a;
a=b;
b=temp;
}
gcd::gcd(long long int a,long long int b){
if(a<b){
Swap(a,b);
}
long long int r0=1,s0=0,r1=0,s1=1,q=0;
while(b){ //这里使用了循环(实际可以用递归代替)
q=a/b;
a%=b;
Swap(a,b);
r0-=r1*q;
s0-=s1*q; //这个方案针对矩阵运算(两算式运算)调整
Swap(r0,r1);
Swap(s0,s1);
}
d=a;
r=r0;
s=s0;
}
ostream& operator<<(ostream &os,const gcd &num){
os<<"r: "<<num.r<<endl
<<"s: "<<num.s<<endl
<<"d: "<<num.d<<endl;
return os;
}
int main(){
long long int a,b;
cin>>a>>b;
gcd GCD(a,b);
cout<<GCD<<endl;
return 0;
}
本方案只是基于原有的算法进行复现,其实只针对 a, b 两个数字的顺序进行了确认调整,负数等其它情况,可以在此基础上增加。