C4-1 最大公约数
(100/100 分数)
题目描述
求两个正整数a 和 b的最大公约数。
要求使用c++ class编写程序。可以创建如下class
#include <iostream> using namespace std; class Integer { private: int _num; public: //构造函数 Integer(int num) { } //计算当前Integer 和 b之间的最大公约数 int gcd(Integer b) { } }; int main(){ int a, b; cin >> a >> b; Integer A(a); Integer B(b); cout << A.gcd(B) << endl; return 0; }
两个正整数a,b,并且1=<a,b <=10000
输出描述a和b的最大公约数
样例输入
1000 1000样例输出
1000注释
#include <iostream>
using namespace std;
class Integer {
private:
int _num;//还不知道有什么用2333
public:
//构造函数
Integer(int num) {//构造函数函数没有返回值吧?
_num=num;
}
//计算当前Integer 和 b之间的最大公约数
int gcd(Integer b) {//这个函数可以有返回值
int countb[b._num+1];
for(int i=1;i<=b._num;i++){
if(b._num%i==0)
countb[i]=i;
else countb[i]=1;
}
int counta[_num+1];
for(int i=1;i<=_num;i++){
if(_num%i==0)
counta[i]=i;
else counta[i]=1;
}//现在问题转化成求两个数组中共同的最大值
countb[0]=1;
counta[0]=1;
int i=b._num,j=_num;
while(i!=0||j!=0){
if(countb[i]==counta[j]) return countb[i];
else {
while(countb[i]>counta[j]||countb[i]==1&&i!=0) i--;
while(countb[i]<counta[j]||counta[j]==1&&j!=0) j--;
}
}
return 1;
}
};
int main(){
int a,b;
cin>>a>>b;
if(a<1||a>10000||b<1||b>10000) return false;
else{
Integer A(a);
Integer B(b);
cout<<A.gcd(B)<<endl; //构造函数调用了gcd这个成员函数?括号里面的B又是什么呢,函数B又没有返回值,gcd调用的是什么呢?
//类A调用A的gcd即可以直接用本地变量a(a即gcd里面的_num);A.gcd调用B,就可以使用B中的所有成员;//希望没理解错吧
}
return 0;
}