想問下以下的c 程式 (是找出H.C.F)

2007-07-18 1:08 am
想問下以下的這三句" tmp = i % j; i =j; j = tmp;"
是什麼意思??? 我最唔明係 i =j 係唔係要佢 返去%多一次??






#include
#include
int main(int argc, char *argv[])
{
int i,j,tmp;

printf(" enter your num \\n==> ");
scanf("%d %d",&i,&j);
while (j != 0)
{
tmp = i % j;
i =j;
j = tmp;
}
printf("the result is %d \\n",i);
system("pause");

return 0;
}
更新1:

那裡tmp = i % j; i =j; j = tmp; i=j會唔會返去tmp =i%j ???因為 我都唔明個i,j 行一次之後個值是什麼??

更新2:

/* if i = 4 , j = 14 */ int tmp, i , j ; while (j != 0) {tmp = i % j ~~~~~~~~ 4%14= 12 i = j ~~~~~~~~~~~ i = 14 j = tmp} ~~~~~~~~ j =12

更新3:

printf( %d \n,i); next loop~ tmp = 14 % 12 i = 12 j = 2 next loop~ tmp = 12 % 2 i = 2 j = 0 唔知我有冇理解錯????

更新4:

其實我想問why 要用 a % b 去找 HCF?? 我唔明個原理

回答 (2)

2007-07-18 8:27 am
✔ 最佳答案
/* if i = 4 , j = 14 */
int tmp, i , j ;
while ( j != 0 )
{
tmp = i % j ~~~~~~~~ 4 % 14 = 4
i = j ~~~~~~~~~~~ i = 14
j = tmp ~~~~~~~~ j = 4
}

loop second time
tmp = 14 % 4 = 2
i = 4
j = 2

third loop
tmp = 4 % 2 = 0
i = 2
j = 0

hcf = 2

[ 其實我想問why 要用 a % b 去找 HCF?? ]
a 與 b兩數的HCF 一定少過或等於b, 假如 a % b = 0, b 一定是 a 的因數, 也是兩數的HCF.
假如 a % b > 0, b 不是 a 的因數, 但 b 的因數一定也是 a 的因數, 所以 a可以不理,只需找出 b 的因數, 因此 i = j 這行把大數棄掉, 用小數與餘數重新找出兩數的因數.
2007-07-18 1:51 am
tmp = i%j ; 意思是==>tmp=i 除 j 的餘數
e.g i=3, j=2
temp=3%2 (3/2餘數=1)
=1

如果i=j不等於零就會一路while落去,等於零就會停。


收錄日期: 2021-04-25 20:33:17
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070717000051KK03313

檢視 Wayback Machine 備份