宣告两个整数的暂存器变数,算出最大公因数

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