宣告兩個整數的暫存器變數,算出最大公因數

Home Home
引用 | 編輯 karen7710
2007-06-24 17:55
樓主
推文 x0
題目:
請宣告兩個整數的暫存器變數,算出最大公因數。
請問大大我這個程式正不正確~

#include <stdio.h>
#include <stdlib ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 gamewalk
2007-06-25 04:13
1樓
  
這樣子是有達到宣告暫存器變數 , 但是好像沒有利用到他的特點 ...

獻花 x0
引用 | 編輯 karen7710
2007-06-25 19:18
2樓
  
那應該怎麼改呢? 表情

獻花 x0
引用 | 編輯 gamewalk
2007-06-26 00:19
3樓
  
對了 你主程式的gcd(x,y)呼叫了兩次不曉得你是不是有多用了 ...

其實老實說這我幾乎沒在用,因為照他的字面上的解釋是他會被那個值放在暫存器內,但是實際上

他並不是每次都可以要到暫存器,如果沒有要到就等於一般的變數放在記憶體內,你應該曉得放在

暫存器內運算比放在記憶體快吧...

複製程式
int gcd( register int x , register int y )   //<-----宣告兩個宣告在這不知道如何....
{
  if( x % y == 0 )
      return y;
  else
      return gcd( y , x % y );
}

不過我不太常用 , 所以我不確定這樣是否會有問題 ... 表情

獻花 x0
引用 | 編輯 GNUGCC
2007-06-26 00:53
4樓
  
其實如果在 main() 函式內第一次宣告暫存器變數時如果
系統有給妳的程式的話只要在 gcd() 函式內用參考值的方式
來處理暫存器的變數就可達到題目的用意...

獻花 x0
引用 | 編輯 karen7710
2007-06-26 19:12
5樓
  
GNUGCC大大,那我還需要改我原先的程式嗎? 表情

獻花 x0
引用 | 編輯 GNUGCC
2007-06-26 21:16
6樓
  
只要把函式的參數改成參考值就行了, 像這樣...

int& gcd(int &x, int &y); // 這個是原型
int main(void)
{
register int x=50,y=70;

// gcd(x,y);   這個要拿掉

printf("最大公因數=%d\n",gcd(x,y));
system("pause");
return 0;
}

int& gcd(int &x, int &y)
{
if(x%y==0)
    return y;
else
{
    x = x % y;
    return gcd(y, x); // 這裡可能要改
}
}

妳先這樣跑看看是否還有其他問題...^^

獻花 x0
引用 | 編輯 karen7710
2007-06-27 19:25
7樓
  
有出現以下的錯誤:
3 syntax error before '&' token
11 syntax error before '&' token
複製程式
#include <stdio.h>
#include <stdlib.h>
int& gcd(int &x,int &y);
int main(void)
{
     register int x=50,y=70;
     printf("最大公因數=%d\n",gcd(x,y)); 
     system("pause");
     return 0;
}
int& gcd(int &x,int &y)
{
     if(x%y==0)
       return y;
     else
     { 
       x = x % y; 
       return gcd(y,x);
       } 
}


獻花 x0
引用 | 編輯 GNUGCC
2007-06-27 23:41
8樓
  
好像是編譯器本身不支援這樣的寫法...
我用 VC++ 可以通過編譯...

獻花 x0
引用 | 編輯 karen7710
2007-06-28 08:57
9樓
  
那要怎麼改呢?
我是dev-c++

獻花 x0
引用 | 編輯 kevinliao
2007-06-30 02:54
10樓
  
既然是 & 有問題那就拿掉試試看囉...

獻花 x0
引用 | 編輯 GNUGCC
2007-07-01 22:07
11樓
  
即然編譯器不支援參考值方式就改用指標試看看...

獻花 x0
引用 | 編輯 karen7710
2007-07-02 09:30
12樓
  
那把&的去掉,不就跟原來的ㄧ樣~
指標要怎麼用呢?

獻花 x0
引用 | 編輯 a86980
2007-07-02 17:45
13樓
  
下面是引用karen7710於2007-07-02 09:30發表的 :
那把&的去掉,不就跟原來的ㄧ樣~
指標要怎麼用呢?
應該是改成 "*" 吧
試試看

獻花 x0
引用 | 編輯 GNUGCC
2007-07-02 23:41
14樓
  
gcd() 函式可能要改成這樣...

int gcd(int *x, int *y); // 這個是原型
int main(void)
{
register int x=50,y=70;

// gcd(x,y);   這個要拿掉

printf("最大公因數=%d\n",gcd(&x,&y));
system("pause");
return 0;
}

int gcd(int *x, int *y)
{
if(*x%*y==0)
  return *y;
else
{
  *x = *x % *y;
  return gcd(y, x);
}
}

獻花 x1
引用 | 編輯 karen7710
2007-07-03 18:52
15樓
  
嗯嗯,謝謝你的解答喔^^ 表情

獻花 x0
引用 | 編輯 daviddr
2008-05-25 00:19
16樓
  
想利用暫存器變數,不要用 recursive 就行了.....

獻花 x0