ページ 11

100!まで表せる計算機

Posted: 2009年7月14日(火) 00:02
by ぷれこ
先日はお世話になりました、ぷれこです。

今日でた宿題は「100の階乗までを表示できる計算機をintの行列で表せ」というもので、
intの行列 kazu[MAX] にひとけたずつ数を入力し、大きな桁を表示できるようにするというものなのですが、

現状、
#include <stdio.h>
#define MAX 200
void main(void)
{
	int kazu[MAX];
	int i,j,k,x,y;
	/*数値を0に固定*/
	for (i = 0;i < MAX;i++){
		kazu = 0;
	}
	kazu[0] = 1;
	printf("階乗を入力する\n");
	scanf("%d",&x);
	
	for (i = 1;i < x + 1;i++){
		/*その回の階乗分をかける*/
		for (j = 0;j < MAX;j++){
			kazu[j] = kazu[j]*i;
		}
		/*繰り上げ処理*/
		for (j = 0;j < MAX;j++){
			if (kazu[j] > 9){
				kazu[j+1] = kazu[j+1] + kazu[j]/10;
				kazu[j] = kazu[j]%10;
			}
		}
	}
	
	printf("%d の階乗は ",x);
	for (i = y;i > 0;i--){
		printf("%d",kazu);
	}	
	printf(" です。");
	
}

といったところまで作ったのですが、桁数を求める方法が分からないので、答えにたどりつけません。
桁数を求められれば答えにたどりつけると思うのですが……
皆さん、お力をお貸しください。

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 00:19
by たかぎ
100個ぐらいなら、表引きにした方が簡単では?

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 00:29
by ぷれこ
学校の宿題なので、行列でないといけないらしいです。

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 00:43
by たかぎ
> 学校の宿題なので、行列でないといけないらしいです。

行列ではなく配列ですよね。
計算結果を文字列のテーブルで持って、それを元に結果の配列に値を設定する方が簡単だということです。

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 09:10
by non
printf("%d の階乗は ",x);
	for (y=0,i = MAX-1;i >= 0;i--){
		if(kazu)
			y=1;
		if(y)
			printf("%d",kazu);
	}	
	printf(" です。");

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 13:34
by lbfuvab
どうやら多倍長演算ですね。

それなら必要な機能は
1、非負の多倍長整数と非負の整数の掛け算
2、非負の多倍長整数の表示
だけです。
桁数については常用対数でいけます。

Re:100!まで表せる計算機

Posted: 2009年7月14日(火) 22:09
by ぷれこ
あの後いろいろ弄ってたら、どうにか動きました。
皆様、どうもありがとうございました。