亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問該如何實現計算a,b的所有公約數?具體看下面!

請問該如何實現計算a,b的所有公約數?具體看下面!

翻過高山走不出你 2021-06-30 11:07:43
實現函數int CommonFactors(int a,int b),計算a,b的所有公約數。第一次調用,返回最大公約數,以后只要使用相同參數調用,每次返回下一個小一些的公約數。無公約數返回-1。以下是我的源代碼:/*函數功能:計算兩個正整數的最大公約數函數入口參數:兩個正整數函數返回值:兩個正整數的最大公約數*/int MaxCommonFactor(int x, int y){while(x != y){if(x > y){ x = x - y; }else{ y = y - x; }}return x;}/*函數功能:計算兩個整數的所有公約數函數入口參數:兩個整數函數返回值:第一次返回最大公約數,以后返回下一個小一些的公約數;無公約數是返回-1*/int CommonFactor(int h, int k){int b;int i; //定義循環變量b = MaxCommonFactor(h, k); //存放最大公約數的變量for(i=b; i>0; i--){if(h%i == k%i){return i;}}return -1;}/*主函數*/void main(){int a;a = CommonFactor(100, 50);printf("CommonFactor = %d\n",a); //按題目意思,這里應該打印50a = CommonFactor(100, 50);printf("CommonFactor = %d\n",a); //按題目意思,這里應該打印25}具體的理解是這樣的:在一次執行內,這個函數被調用了多次,但是每次打印的結果不同。比如,求100和50的公約數,題目的要求是:第一次調用打印出50,第二次調用打印出25,第三次調用打印出10,第四次調用打印出2,第五次調用打印出1;但是你可以只是調用兩次,打印出50和25,而不是一次調用就把全部公約數全部的打印完。我的疑問是:我不能實現第二次打印25,第二次和以后的調用都是輸出50,請高手幫忙修改一下程序,最好也有詳細的解釋。謝謝??!這題目搞了我一個下午,我初學,奔淚。。。主要是int CommonFactor(int h, int k)的實現,int MaxCommonFactor(int x, int y)是沒有問題的吧。另外,希望不要用到數組,指針,結構體。
查看完整描述

2 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

//按題目的意思要判斷是否使用相同的參數
struct
{
int a, b, gcd, k;
}A[256];
int N = 0;
int gcd(int a, int b)
{
int t = a%b;
while(t)
{
a = b;
b = t;
t = a%b;
}
return b;
}
int CommonFactor(int a, int b)
{
int i, k, y;
for(i=0; i<N; i++)
if(a==A[i].a && b==A[i].b)break;
if(i==N)
{
A[N].a = a;
A[N].b = b;
A[N].k = 1;
A[N].gcd = gcd(a, b);
++N;
return A[i].gcd;
}
k = 0;
for(y = A[i].gcd-1; y>0; y--)
{
if(A[i].gcd % y == 0)++k;
if(k==A[i].k)break;
}
if(k!=A[i].k)return -1;
++A[i].k;
return y;
}
void fun(int a, int b)
{
printf("(%d %d) : %d\n", a, b, CommonFactor(a, b));
}
int main()
{
fun(100, 50);
fun(4, 6);
fun(100, 50);
fun(4, 6);
fun(100, 50);
fun(100, 50);
fun(100, 50);
fun(100, 50);
fun(100, 50);
}



查看完整回答
反對 回復 2021-07-04
  • 2 回答
  • 0 關注
  • 700 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號