割り切れるものを探すプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
オルムント

割り切れるものを探すプログラム

#1

投稿記事 by オルムント » 18年前

こんにちは。
プログラムの作りかたをお聞きします。

整数をふたつ読み込み、どちらの数も割り切ることが
できる0 より大きい数でもっとも大きいものを見つける
プログラムの作り方を教えてください。


自分で試して
ひとつ読み込、割り切れる1より大きい数で一番小さいものを見つける
プログラムなら作ることが出来ました。


これを改造したら作れると思うのですが、
どこをどのように変えればいいのか教えてください。

おねがいします。


#include<stdio.h>

int
main()
{
int x,i;
scanf("%d",&x);

for(i=2;x%i;i++)
{
i==0;
}

printf("%d\n",i);


return 0;
}

管理人

Re:割り切れるものを探すプログラム

#2

投稿記事 by 管理人 » 18年前

えぇと、つまり最大公約数を見つけるプログラムですか?

for(i=2;x%i;i++)
{
i==0;
}

ここのとこの処理のしたい事がよくわかりません。
i==0は何を意味しようとしたのですか?

オルムント

Re:割り切れるものを探すプログラム

#3

投稿記事 by オルムント » 18年前

読み込んだ2つ数字の最大公約数を見つけるプログラムです。

for(i=2;x%i;i++)
{
i==0;
}

は読み込んだ数字を2から割っていって
あまりが0になったらfor文をやめるように
しようと思い書きました。

オルムント

Re:割り切れるものを探すプログラム

#4

投稿記事 by オルムント » 18年前

w←これ消してください。
気づかず投稿してしまいました。
すみません。

Justy

Re:割り切れるものを探すプログラム

#5

投稿記事 by Justy » 18年前

整数をふたつ読み込み、どちらの数も割り切ることができる
0より大きい数でもっとも大きいものを見つける
 最大公約数のことでしょうか。

 最大公約数はユークリッドの互除法という方法で求めることができます(ググって見て下さい)。
 その方法も減算方式と剰余方式とありますが、剰余方式だと下のようになります。
[color=#d0d0ff" face="monospace]#include<stdio.h> 

int main(void) 
{ 
    int v1, v2, t, result;
    if(scanf("%d %d", &v1, &v2) == 2)
    {
        result = v1;
        while(v2 != 0)
        {
            t = result % v2;
            result = v2;
            v2 = t;
        }
        printf("result = %d\n", result);
    }
    return 0; 
}
[/color]

管理人

Re:割り切れるものを探すプログラム

#6

投稿記事 by 管理人 » 18年前

一番シンプルな形にするとこうなると思います。
#include <stdio.h>

int kouyakusu(int x, int y){
   if (!y) return x;
   return kouyakusu(y, x%y);
}

int main(){
   int x,y;
   scanf("%d %d",&x,&y);
   printf("最大公約数 : %d\n",kouyakusu(x,y));
   return 0;
}
これは再帰関数です。

後、
for(i=2;x%i;i++)
{
i==0;
}
これは確かに2から始まって割り切れる値まで来ると抜けていますが、
i==0はいらないんじゃないですか?
for(i=2;x%i;i++) ;
でいいと思います。

管理人

Re:割り切れるものを探すプログラム

#7

投稿記事 by 管理人 » 18年前

約数の1以外の最小の値は
#include<stdio.h> 

int main(){
	int x,i; 
	scanf("%d",&x); 
	for(i=2;x%i;i++) ;
	printf("%d\n",i); 
	return 0; 
}
となります。
for文のx%iはいい考えですね。

オルムント

Re:割り切れるものを探すプログラム

#8

投稿記事 by オルムント » 18年前

わかりやすい回答ありがとうございます。
こんな方法があったんですか!


参考にさせてもらい
do-while文でも作れると思い作って見ましたが
この書き方は正しいでしょうか?

#include<stdio.h>

int
main()
{
int x,i,y,k;
scanf("%d",&x);
scanf("%d",&y);
do{
k=x%y;
x=y;
y=k;
}
while(y !=0);

printf("%d\n",x);


return 0;
}

管理人

Re:割り切れるものを探すプログラム

#9

投稿記事 by 管理人 » 18年前

後判定する意味があるんでしょうか?

k=x%y

0で割ってはいけませんよね。
せっかく上記の式がエラーにならないように判定しているのに一度計算してから判定したのでは
判定する意味がないです。

値を入力するとき、2つ目の値を「0」にしてみてください。
きっとエラーになるはずです。

オルムント

Re:割り切れるものを探すプログラム

#10

投稿記事 by オルムント » 18年前

ほんとうですね!
0で割ったらエラーになってしまいました。

度々質問して
大切な時間を割いてもらい
さらに
親切な回答ありがとうございました。

管理人

Re:割り切れるものを探すプログラム

#11

投稿記事 by 管理人 » 18年前

解決されたのでしたらよかったです。
頑張ってください☆

閉鎖

“C言語何でも質問掲示板” へ戻る