C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: オブジェクトの協調による階乗計算


(過去ログ 66 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■38441 / inTopicNo.1)  オブジェクトの協調による階乗計算
  
□投稿者/ ベリー (1回)-(2009/07/14(Tue) 17:56:02)

分類:[Java] 

初めて質問させていただきます。
まだjavaをはじめて1か月くらいの初心者です。
学校で出された課題で悩んでいます。
問題は次の通りです。

53!を正確に計算して出力するjavaプログラムを作成せよ。
ただし、1桁分の数を記憶するオブジェクトを多数作り、それらの協調で計算を進めていくこと。
main→1桁目→2桁目→…→70桁目という感じに。

そのオブジェクトを作り、53!を計算するところまでは出来たのですが、出力がうまくいきません。
自分で作ったプログラムは以下の通りです。

public class factorial_of_53 {
	public static void main(String args[]){
		Digit top_digit = null;

		for(int i = 70; i >= 1; i--)
			top_digit = new Digit(top_digit);
		
		top_digit.add(1);
		for(int i = 2; i <= 53; i++){
			top_digit.multiply(i);
		}	

		top_digit.print();
	}
}

class Digit{
	private int value;
	private Digit next_higher_digit;

	Digit(Digit next_higher_digit){
		value = 0;
		this.next_higher_digit = next_higher_digit;
	}

	public void add(int num){
		value += num;
	}

	public void multiply(int multiplier){
		this.multiply(multiplier, 0);
	}

	private void multiply(int multiplier, int carry){
		value *= multiplier;
		value += carry;
		int next_carry = value/10;
		value %= 10;
		if(next_higher_digit != null)
			next_higher_digit.multiply(multiplier, next_carry);
	}

	public void print(){
		System.out.print("53! = ");
		this.next_print();
	}

	private void next_print(){
		System.out.print(value);
		if(next_higher_digit != null)
			next_higher_digit.next_print();
		else
			System.out.println();
	
	}
}
実行結果
53! = 0000000000002764273186638873430969469939833573108924655200604823884724

結果が逆に表示されてしまうわけです。
何とか70桁目から出力したいのですが、どうすればよいのでしょうか?
よろしくお願いします。

引用返信 編集キー/
■38445 / inTopicNo.2)  Re[1]: オブジェクトの協調による階乗計算
□投稿者/ επιστημη (2061回)-(2009/07/14(Tue) 19:08:49)
επιστημη さんの Web サイト
> 結果が逆に表示されてしまうわけです。
> 何とか70桁目から出力したいのですが、どうすればよいのでしょうか?

裏返すだけちゃいますかしら。

	public void print(){
		System.out.print("53! = ");
		this.next_print();
                System.out.println();
	}

	private void next_print(){
                  // 後続桁を出力してから
		if(next_higher_digit != null)
			next_higher_digit.next_print();
                  // その桁を出力。
		System.out.print(value);
	}

引用返信 編集キー/
■38446 / inTopicNo.3)  Re[2]: オブジェクトの協調による階乗計算
□投稿者/ ベリー (2回)-(2009/07/14(Tue) 19:30:08)
No38445 (επιστημη さん) に返信

うまくいきました。
本当にありがとうございました。


そんないとも簡単にできるとは・・・
1週間くらいずーっと悩んでた自分が恥ずかしいです。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -