No.1
- 回答日時:
小学校で習った割り算の筆算と同じ方法を
使えば何桁でもでると思います。
それが最良の方法かどうかは別にして
1桁づつ配列にいれれば可能です。
回答ありがとうございます。
1桁ずつ配列にいれて筆算と同じやり方で計算させる場合にはどのようにしたらいいのでしょうか?
a[15]={4,2,8,2,2,4,5,9,3,3,4,9,3,0,4};
b[15]={1,3,6,3,0,8,1,2,1,5,7,0,1,1,7};
と確保して#3の方が言っているように
428224593349304/136308121570117=3
だからと計算させればいいのでしょうか?
その場合最初に3と出すのは
double x=428224593349304;
double y=136308121570117;
としておいてx/yから3を出すのでしょうか?
No.2
- 回答日時:
一番単純なのは以下のように1桁ずつ求める方法ではないでしょうか?
配列を使う必要もありません。ただし、桁数が多いので、64ビット整数型を
使うとよいでしょう。
428224593349304 / 136308121570117 = 3 余り 19300228638953
193002286389530 / 136308121570117 = 1 余り 56694164819413
566941648194130 / 136308121570117 = 4 余り 21709161913662
217091619136620 / 136308121570117 = 1 余り 80783497566503
807834975665030 / 136308121570117 = 5 余り 126294367814445
…
回答内容としては#1の方と同じです。
回答ありがとうございます。
参考にさせてもらいます。
今回は円周率を出したいのではなくて配列を使ったやり方を考えたいのでもう少し考えてみます。
No.3
- 回答日時:
桁が多いので分かりやすくするために、42/19を考えます。
int i[2] = { 4, 2 };
int j[2] = { 1, 9 };
とします。まず、42の中に19が何個入るかを検討します。単純な方法としては19を1倍、2倍、...として、42を超えないもっとも大きい19の倍数を見つけます。10の位はj[0]×2=2です。1の位はj[1]×2=18で桁上りがありますので、j[0]++、j[1]=8とします。これで、19×2=38です。42-38は、10の位はi[0]=i[0]-j[0]=1です。1の位はi[1]=i[1]-j[1]=-4となり、かりが生じますので、i[0]--、i[1]=4となります。これで、42/19=2余り4が得られます。次はi[1]=4を10倍(i[0]=4、i[1]=0)して同様に計算します。筆算で割り算をすることを配列を使って表現するとこのようになると思います。
ご質問のように30桁の場合は30個+αの配列を用意すればいいと思いますし、それ以上の桁の計算もできます。
答えにはなっていないかも知れませんが、何かのご参考になれば幸いです。
回答ありがとうございます。
>42の中に19が何個入るかを検討します
というのは
int i[2] = { 4, 2 };
int j[2] = { 1, 9 };
のほかに42と19を用意しとくのですか?
2個入ることがわかったとして
j[0]=j[0]*2=2
j[1]=j[1]*2=18
として
j[1]が桁上がりしているので
j[0]++,j[1]=8として
i[0]=i[0]-j[0]=1
i[1]=i[1]-j[1]=-6
として
i[1]がマイナスなので1個上の位から持ってきて
i[0]=0,i[1]=4となって
余りから計算するのに10倍して
i[0]=4,i[1]=0として
ここから19が何個入るかと考えるときは
n=i[0]*10+i[1]として40を作らないといけないのでしょうか?
またi[0],i[1]を10倍する前にi[0]が0じゃない場合はどのようにするのでしょうか?
No.4
- 回答日時:
i,jを渡して積kを得る処理、
// i*j=k
seki(char *i, char *j, char *k);
などを作成すると良いのでは?
また、積の処理は和の処理と整数→文字列処理があると簡単な気がします。
// i+j=k
tasu(char *i, char *j, char *k);
// int→char変換
henkan(int i, char *j);
--
> 友達は、428224593349304を1桁ずつ配列に入れて手計算でやるようにすればできると言っていたのですが
できるけど、実は結構面倒だったりします。
オーバーフロー、アンダーフロー、小数、符号の処理など…。
1桁に1文字の方法ではありませんが、nビットの整数を考える「多倍長計算」というキーワードで情報収集すると良いかも。
No.5ベストアンサー
- 回答日時:
例えば、掛け算と引き算は、
const int N = 2;
void multiply( int a[], int b, int c[] )
{
int x = 0;
for ( int i=N; i>=1; i-- ) {
x += a[i] * b;
if ( x < 10 ) {
c[i] = x;
x = 0;
}
else {
c[i] = x % 10;
x /= 10;
}
}
c[0] = x;
}
void substraction( int a[], int b[], int c[] )
{
for ( int i=N; i>=1; i-- ) {
c[i] = a[i] - b[i];
if ( c[i] < 0 ) {
c[i] += 10;
a[i-1] -= 1;
}
}
c[0] = a[0] - b[0]
}
int A[N+1] = { 0, 4, 2 };
int B[N+1] = { 0, 1, 9 };
int C[N+1] = { 0, 0, 0 };
int D[N+1] = { 0, 0, 0 };
multiply( B, 2, C );
substraction( A, C, D );
のような関数だと思います。ただ、これはあくまで考え方であって、実際にはNo.4の方が書かれているような問題を解決しなくてはならないと思います。
No.6
- 回答日時:
supremacistさん、おはようございます。
タイトルからすると、行いたいのは近似計算ですよね。
そうすると、分子、分母とも15桁ですから答えの
有効数字も高々15桁です。従って、例え30桁求めても後ろ15桁は意味の無い数字になります。それでもよいから30桁求める事が目的だということでしたら、今までの回答を参考にしてください。(それらの方法を一般に多倍長計算といいます)
有効な15桁だけで良いということでしたら次のようになります。
double x = (double)428224593349304/136308121570117;
xはdouble型ですので最大16桁が有効になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 計算機科学 円周率のミスの発見について 3 2022/10/30 10:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 数学 数2Bの数列の問題です。 自分は、 まず数列 an=ar^(n-1)と置き こちらの問題の、y= の 1 2022/07/07 16:26
- 所得税 所得税の計算方法がわかりません 4 2022/06/26 13:36
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- 電気・ガス・水道業 複数の積算消費電力計での配線方法 1 2022/04/04 11:04
- 数学 円順列 男子3人 女子3人がいる。 円形のテーブルを囲って座る。座る席はくじによって無作為に選ばれる 3 2022/11/30 01:12
- 数学 常用対数の求め方 log10の2は約0.3010…ですがこの求め方を教えて下さい。0.1から順番に計 8 2022/12/27 04:02
- 工学 送配線における電圧降下の計算について教えてください。添付の図にて、A点の電圧降下を求める場合、Iaと 2 2022/10/26 18:25
- その他(学校・勉強) 株などを複数違う割合で購入した場合の利率の計算方法 4 2022/05/01 09:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
Cのエラー
-
define で 配列
-
C言語において、 配列要素をひ...
-
C#で配列が空かを判定するには?
-
C言語 数値の連続入力について
-
配列のNULL初期化について
-
ポインタを使って構造体の配列...
-
構造体の動的確保について
-
AfxBeginThread の引数について
-
C言語の課題が出たのですが自力...
-
fclose()でセグメンテーション違反
-
const で宣言してるのに、値が...
-
c言語
-
C言語の配列のコピーについて質...
-
メンバ変数の取得
-
C言語で重複組合せを全列挙
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#でのフィボナッチ数列
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
配列のアドレス部
-
char型配列をint型に代入するには
-
2番目の最大値を求める
-
C言語の課題が出たのですが自力...
-
C言語についてです 5人のテスト...
-
C言語から質問です。
-
C言語 ファイルの指定された行...
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
MFCのCArrayを使った二次元配列
おすすめ情報