a と b とを与えて d=GCD(a,b) と
ax+by=d の解 x,y を与えるプログラム:
#include<stdio.h>
void f(int a,int b,int*d,int*x,int*y) { int x1,y1;
if(b==0) {*x=(a>=0?1:-1); *y=0; *d=abs(a);}
else { f(b,a%b,d,&x1,&y1); *x=y1; *y=x1-(a/b)*y1; }
return;}
int main(int argc, char**argv) { int a,b,d,x,y;
if(argc!=3) exit(0);
f(a=atoi(argv[1]), b=atoi(argv[2]), &d, &x, &y);
printf("\n %d * %d + %d * %d = %d \n\n", a,x,b,y,d);
}
上記のCプログラムをJavaに書き換えたいのですが、まったくといっていいほど手も足も出ません。
Javaはまだ初心者なもので…
どなたか詳しい方、どうかアドバイス、またはご教授お願い致します。
No.3ベストアンサー
- 回答日時:
Javaとして適切な書き方は別にあるでしょうが、
CのソースをそっくりJavaのソースに置き換えると下記のとおりです。
Javaではポインタが使えませんから、
長さ1の配列で代用しています。
正しくは、redfox63さんもおっしゃっている様に、
クラスの利用などを考えるべきだと思います。
class gcd
{
private static void f(int a , int b , int[] d , int[] x , int[] y)
{
int [] x1 = new int[1];
int [] y1 = new int[1];
if(b == 0)
{
if(a >= 0) x[0] = 1;
else x[0] = -1;
y[0] = 0;
d[0] = Math.abs(a);
}
else
{
f(b , a%b , d , x1 , y1);
x[0] = y1[0];
y[0] = x1[0] - (a/b)*y1[0];
}
}
public static void main(String args[])
{
int a,b;
int [] d = new int[1];
int [] x = new int[1];
int [] y = new int[1];
if(args.length != 2)
{
System.exit(0);
}
a = Integer.parseInt(args[0]);
b = Integer.parseInt(args[1]);
f(a , b , d , x , y);
StringBuffer buf = new StringBuffer();
buf.append(a);
buf.append(" * ");
buf.append(x[0]);
buf.append(" + ");
buf.append(b);
buf.append(" * ");
buf.append(y[0]);
buf.append(" = ");
buf.append(d[0]);
System.out.println(buf.toString());
}
}
No.2
- 回答日時:
自分自身を呼ぶ 再帰関数を使っていますので『再帰』についても調べてみましょう
Javaの場合 ポインタによる参照渡しを使えませんのでその辺りも調べてみる必要があるでしょう
別クラスとして定義し再帰中で使われるパラメータをフィールドとして定義して呼び出すよにします
関数fなら
Class fを定義 x,yをフィールドを定義
Class fに 関数fを定義 dが戻り値、a,bを引数といった具合です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVA EOFの検出 (条件文で「...
-
SwingでJtableのヘッダ行が表示...
-
成績表示プログラム
-
public class Power {
-
c# デリゲート関連の命名について
-
Javaで簡単なアニメーションを...
-
JAVAでCの関数ポインタのような...
-
6桁の数字を重複なしでランダム...
-
JavaScriptからJavaアプレット...
-
BOOL値を逆にしたい
-
Java配列でNullPointerExceptio...
-
java キーボード入力された値の...
-
System.err. printlnとSystem.o...
-
iterateで受け取った値を処理に...
-
EXCEL VBA で、0から?1から?
-
コマンドライン引数の例外処理...
-
Java配列の問題を教えてくださ...
-
Eclipseのコンソールを常に表示...
-
cloneメソッドについて (java)
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
java spring でエラーが出て困...
-
Java 初心者 int型の取り扱い方
-
式の型は配列型で int に解決済...
-
DataSet(DataTable)の使い方
-
C#で、デリゲートからその関数...
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
JUnit4のアノテーションについて
-
行の途中から読み込む方法
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
javaでcsvファイル読込時の改行...
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
c# デリゲート関連の命名について
-
intが負の時に投げる例外はあり...
-
java 長さの異なる配列の代入
-
デスクトップのアイコンの位置...
-
【C#】フォームをなめらかに移動
おすすめ情報