ベストアンサー Ruby の 階乗 C 有効桁数 2010/02/06 23:31 RUBYで 階乗、組み合わせの個数(4C2=6)、有効桁数を2000桁にする プログラムの記述の方法を教えていただきたいです。 みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー notnot ベストアンサー率47% (4903/10364) 2010/02/07 00:30 回答No.1 Rubyの整数の桁数は無限桁なので、特に意識せずに、整数だけで演算すればいいです。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Ruby 関連するQ&A 階乗の桁数 200!の桁数を求めよ。という問題で、 10進法で何桁か?は375桁とわかったのですが、 2進法、4進法、8進法、16進法で何桁なのかわかりません。 2進数の桁数の計算方法は Nlog10=xlog2 (底は10) で、求められると思うのですが、 約1245.723と出てきてしまい、 1245桁なのか1246桁なのかわかりません。 こういう場合は四捨五入するのですか?切捨てにするのですか? 教えてください。 お願いします。 C#でmCnの求め方について 階乗、組み合わせ C#の勉強を始めて数日の初心者です。 8個の中から4個を選ぶ組み合わせ 式1 m! mCn = ―――― n!(m -n)! 式2 m×(m-1)×(m-2)×…×(n+1) mCn = ―――――――――――― (m-n)! ---------------------------------------------- 勉強している本の中で、VBSctiptで式2を下記のような 記述例がありましたが、これをC#で書き換えると どのようになりますか? VBScriptの内容は全然分かりません。 メソッドの再帰呼び出し等は使わず、 あくまで、For文のみを使ってC#で記述したいです。 m = CInt(InputBox("何個の中から?")) n = CInt(InputBox("何個を選びますか?")) C = 1 For i = m To (n + 1) Step -1 c = c * i Next For i = (m - n) To 1 Step -1 c = c / i Next MsgBox "組み合わせ = " & CStr(c) ---------------------------------------------- 8個の中から4個を選ぶ組み合わせ 自分で書いてみたのですが、上記の式2のVBScriptの例に のっとった記述方法ではない感じがします。 int m = 8; int n = 4; int c = 0; for (int i = 1; i <= m; i++) { c = c * m; // mの階乗を求める } for (int i = 1; i <= n; i++) { d = d * n; // nの階乗を求める } e = d * d; // これの意味がよく分かりません。 f = c / e; Console.WriteLine(f); // 70 よろしくお願いします。 有効桁数について ある数値を5回測定したとします A 5.039 B 5.075 C 5.092 D 5.064 E 5.058 有効桁数はすべて4桁ですよね? 次にA~Eの平均を取ると (A+B+C+D+E)/5=5.0656 と関数電卓で結果がでますが、4桁に丸めて5.066とすれば有効桁数の扱い方としては問題ないですか? そしてA~Eの平均の2乗をするときは、上記の平均を有効桁数4桁に丸めた5.066を2乗して (5.066)^2=25.664356 となり、そして5.066の有効桁数4桁に合わして25.66とすればいいのでしょうか? それとも平均の値を4桁に丸める前の電卓で出た値のまま2乗した後、最終的に4桁に丸めるのがいいのでしょうか?この数値だとどちらでやっても4桁にした値は変わりませんが・・・ 有効桁数の扱い方で問題があったら教えてください、また平均の2乗を求めるときはどちらが正しいのでしょうか? (平均の値の2乗は平均×平均なのだから平均の値を4桁にせず5桁として計算すると平均の2乗は有効桁数5桁と考えるので、やはり正しく平均の値を測定値の有効桁数4桁に丸めて出した平均の値を2乗する方が正しいですかね・・・) また、上記の平均の計算をしたときのよな、「5」などの数字の有効桁数は何桁ですか?1桁なんでしょうか?もし1桁なら割り算をしているので有効桁数はいちばん桁数の少ないものに合わせるので有効桁数1となると平均の値が「5」となりおかしいとおもうんですが・・・ 上記の平均を取ったときの「5」や、測定回数の数値や、測定していない数で100で割れと書いてあったりしたときは、それらの数字の桁数も考えなければならないんでしょうか? 読みづらい文章かもしれませんが、ご回答待っています。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム floatの有効桁数 floatの有効桁数を調べていると(インターネット)、6桁や7桁というように、サイトによって異なっていました。 私はc言語でfloatが32bitの時を知りたいのですが、どのサイトが本当なのかなどが分かりませんでした。 なぜサイトによってさまざまな有効桁数を書いているのか? 結局floatの有効桁数は何桁なのか? が知りたいです。 よろしくお願いします。 C言語で確保できるビットの桁数 C言語でビット単位でデータ操作する際に、確保できるビットの桁数はたとえば以下のような例の場合 unsigned char bit; 1バイト(=8ビット)なので8桁ということは勉強しました。 ここで、たとえば計算でビットの桁数を100桁用意したい場合 以下のように32*4桁という風に分ける方法しかないのでしょうか? unsigned int bit[4]; できれば一つの変数で済ませたいのですが、何か良い方法をご存知の方いらっしゃいましたらよろしくお願いします。 C言語で、数値の桁数を求めるには?? C言語で数値の桁数を求めるプログラムをもとめたいのですが どうすればいいのでしょうか int c; int a; c=12345; a=printf("%d",c); とするとaに桁数は入るのですが cがPRINTF関数により表示されてしまいます どうすればいいでしょうか? わかる方はおしえてください、おねがいします。 桁数を求めるプログラム。 入力した数字の桁数を表示させるというプログラムを考えています。 例) 135 この数字の桁数は3桁です。 などと表示させたいと思っています。 それで、私は入力した数値を10で割っていって入力した数値aがa<=0になったらループを終了して 何回ループしたかのカウンタで桁数を表示させようかと考えました。 たとえば135→13.5→1.35→0.135で整数部分が0となるのでループを打ち切って 3回繰り返したので3桁と表示させたいと思いました。 それでプログラムを考えてみたのですが、どうにもうまくいきいません。 どのように修正したら桁数が表示できるようになるでしょうか? #include <stdio.h> main() { double a=0; int n=1; scanf("%d",&a); while(1) { a=a/10.0; if(a<=0){ break; } n++; } printf("その数は%d桁です。\n",n); } Nの階乗 この問題がどうすればいいのかまったくわかりません。 考え方を教えて下さい。 ------------------------------------------------ まず、プログラムの中で一つの整数N(1<=N<=100)を入力させる。そして、一桁ずつを一つの整数配列の別々の箱に入れる表現を用いて、Nの階乗を計算し、その結果を表示するプログラムを作れ。例えば1258をdat[4]=1, dat[3]=2, dat[2]=5, dat[1]=8と表す。アルゴリズムには、ループ(for文、while文、repeat文のいずれか)を用いなさい。 Rubyのプログラムについて Rubyのプログラムについて、宜しければ教えてください。 def fct(n, f=1) if n<=1 then f else fct(n-1, n*f) end end def factorial(n) (1..n).inject{|x,y| x*y} end def factorial(n) eval( [*(1..n)].join("*") ) end このプログラムが、階乗を計算するメソッドになっているみたいなのですが、なぜコレだけで階乗が計算できるのでしょうか? 宜しければ教えてください>< 階乗の記号 ^ プログラムのようにテキストしか扱えない文書の場合、階乗の記号として ^ を使ったりしますが、 1. なぜこの記号が使われるようになったのでしょう。 2. 世界的に通用するのでしょうか。 3. C などではこの記号は排他的論理和をあらわしますが、混乱しないのでしょうか。 rubyでC言語のexitにあたる構文は? 現在、C言語のプログラムをrubyに書き換えています。 そこで、C言語のexitに当たるrubyの構文、もしくは、 文法が見つからず、困ってます。 (ある条件になったら、強制的にrubyの実行を 停止させたいのですが、、、) (__END__ですか?) 詳しい方が居ましたら、ご指南下さい。 数字の桁数を揃えたい(0→01のように) 数字をalert文で表示するときに、 桁数を2桁で出力したいのですが、どのような方法を取るのが良いでしょうか? 数字が1桁(0~9)の時に先頭に0を付けたいのです。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 有効桁数の数え方・誤差 actionscriptをやっているのですが、有効桁数の数え方がよくわかりません。 たとえばNumber(有効桁数15桁)で public function sample() { var tf : TextField = new TextField(); var suuji : Number = 0.999; var suuji2 : Number = 1.001; var kekka : Number; kekka = suuji2 - suuji; tf.text = "" suuji2 + "-" suuji + "=" + kekka; } というものを実行させた場合kekkaが0.0019999999999998908になるのですが、この際の各々の変数の有効桁数は suuji 3桁 suuji2 4桁 kekka 0桁 という解釈で良いのでしょうか? そしてこの場合は桁落ちが起きていると言えるのでしょうか? また、この際にkekkaに誤差がでるのはNumberの有効桁数が15桁であるため、それ以降の桁に勝手に数字が入れられるということでしょうか? (0.999が勝手に0.9990000000000001092になる) もうひとつわからないことがあって、これは型の有効桁数を調べるプログラムなんですけど、 public function sample2() { var n : int; var sb : Number,sn : Number,t : Number; var tf : TextField = new TextField(); tf.border = true; tf.width = 400; tf.height = 300; n = 1; sn = t = 1.0; sb =0.0; while(sn != sb){ tf.appendText(n + ":" + sn + ":" + t + "\n"); n++; t = t / 10.0; sb = sn; sn = sb + t; } addChild(tf); } を実行すると 1:1:1 2:1.1:0.1 3:1.11:0.01 4:1.111:0.001 5:1.1111:0.0001 6:1.11111:0.00001 7:1.111111:0.0000010000000000000002 8:1.1111111:1.0000000000000002e-7 9:1.11111111:1.0000000000000002e-8 10:1.111111111:1.0000000000000003e-9 11:1.1111111111:1.0000000000000003e-10 12:1.11111111111:1.0000000000000003e-11 13:1.1111111111110001:1.0000000000000002e-12 14:1.1111111111111:1.0000000000000002e-13 15:1.11111111111111:1.0000000000000002e-14 16:1.1111111111111112:1e-15 と表示されるのですが、これだと16行目の有効桁数が16桁になっているのでしょうか? しかしそれだと型の有効桁数と矛盾するので、たまたま16桁目が1だっただけで有効桁数は15ということでしょうか? また、tに2や3の数字が勝手に入れらていますが、これも上記のように有効桁数ではない部分に勝手に数字を入れられているということでしょうか? 長文、また見辛く申し訳ありません。 パソコンで階乗を計算 現在、fortran90を使って階乗を計算するプログラムを作っております。 プログラム内容は、(n !を求めえるプログラム) n=0 do i=1,100 n=n*i enddo このプログラムを実行すると、12!までは予想された値が得られるのですが、13!以降は電卓で計算した値と遙かに異なる値が得られました。 このプログラムは間違っているとは思えないですが、電卓の計算とパソコンの計算が異なる結果になった理由が分かりません。 どなたか、ヒントや参考情報だけでもいいので教えてください。 ちなみにパソコンによる計算結果は、 i n 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 13 1932053504 14 1278945280 15 2004310016 16 2004189184 17 -288522240 18 -898433024 19 109641728 20 -2102132736 21 -1195114496 22 -522715136 23 862453760 24 -775946240 25 2076180480 26 -1853882368 27 1484783616 28 -1375731712 29 -1241513984 30 1409286144 31 738197504 32 -2147483648 33 -2147483648 34 0 35 0 36 0 36の階乗以降0です。 計算結果が正となるが、結果が違うモノ(例えば、13!や31!)は単精度で約10桁程度しか有効数字が得られないためであると思われるのですが、負になったり、0になる理由が分かりません。 apache,ruby(PHP),cの連携について C言語で書いたプログラムをプロセスとして立ち上げておいて、Rubyからそのプロセスに値を渡してCのプログラムを実行することは可能でしょうか。 以下に、現在の構成とやりたいことを記載します。 【構成】 OS:CentOS httpd:apache 使用言語:Ruby(or PHP)、C言語(OpenCV) 【やりたいこと・概要】 ユーザがブラウザからパラメータを入力し、そのパラメータを元にサーバで画像処理を行い、その結果をユーザへXMLで返したい。 その際に、画像処理を行うプログラム(C言語)では、ディスクから大量のデータをメモリにロードするため、処理時間がかかります。そこで、C言語はプロセスとして常に上げておくことで、メモリへのロード時間を削減したい。 【やりたいこと・流れ】 1.ユーザが、ブラウザから値を入力し、POSTする 2.Ruby(or PHP)で受け取る 3.受け取った値をC言語で書かれたプログラム(OpenCVを利用した画像処理プログラムで、これをプロセスとして常に上げておきたい)へ連携する 4.連携された値を元に画像処理を行い、処理結果をRuby(or PHP)へ返す 5.Ruby(or PHP)で受け取った情報をXMLにして、ユーザへ返す ※ Ruby(or PHP)と書いた部分はC言語をプロセスとしてあげておいてPOSTを受け取ることが出来ればC言語での実装でも構いません。 乱文になってしまい読みづらくて申し訳ありません。 情報の過不足などが有りましたらご指摘をお願いします。 お分かりになる方、ヒントでも構いませんので教えて頂ければ幸いです。 以上です。よろしくお願い致します。 Excel 桁数を揃えたい 例: 123→123□□□ 1234→1234□□ 12345→12345□ 123456→123456 □=スペース ↑上記のように数値の桁数がちがうものスペースを入れてをすべて6桁にしたいです。 良い方法はありますか??おわかりの方教えてくださーい! アクセスで桁数を増やしたい アクセスで桁数を増やしたい 従業員のデータベースをアクセスで作成しているのですが、 諸般の事情と従業員の出入りが激しいので桁数を増やしたいのですが、 方法がわかりませんのでお願いします 今現在は、 従業員の個人コードを10001の5桁で管理しておりますが、 それを、7桁にしたいのです。 最初の1は、部署を表し、0001は、個人コードです。 部署 1を11と2桁にし 個人コード0001の4桁を00001の5桁にしたいのです たとえば 旧個人コード 新個人コード 最初の1を11に 10001 1100001 1を11に 12222 1102222 2を12に 23333 1203333 3を13に 32222 1302222 4を21に 43333 2103333 5を22に 51234 2201234 6を31に 68888 3108888 7を41に 70001 4100001したいのです このフィールドのデータ型は数値型で主インデックスです OSはXP ソフトはオフィス2003です。 【至急】Rubyによるテキスト変換について 現在、大量のテキストを変換する業務がありまして、 これをRubyで一括処理するよう上司の方から言われております。 Rubyというプログラムをあまり理解できていない中での作業となり、 全く分からないことも多くございますので、ご先輩方のご教授を賜ればと思っております。 やりたいことですが、 既に変換する内容があります。 例:あ → い う → え とあるとします。 おそらくRubyの変換記述としては、 _text = (_text.gsub(/あ/,'い')) _text = (_text.gsub(/う/,'え')) であっている思うのですが、 これをwindowsのbatで呼び出して、テキスト変換を自動的に処理する記述が知りたいです。 もし可能でしたら、 参照する rb の記述方法と それを実行する bat の記述方法を教えて頂きたく思っております。 セル内の数値の左側に0を追加して桁数を一致させる。 個数が入力されている列が存在します。例えば、個数は6個2個と一桁のものもあれば、10個、2065個、のように二桁や四桁のものもあります。 この場合に、書式設定で、ユーザー定義の書式を利用して見た目の桁数を変更するのではなく、単純に0を追加して八桁に揃えたいのです。 00000006、00000002、00000010、00002065、としたいのです。 その理由として、A列に商品コード(13バイト)B列に個数(8バイト)のレイアウトが絶対であり、この二列を=CONCATENATE(A:A,B:B)で単純結合したいのです。 この時、ユーザー定義の書式変更でB列を8桁にしていると、結合時に0が消えて、レイアウトが崩れてしまいます。 これを回避するために、単純に個数の左側に0を追加し、8桁にそろえるための関数を探しています。 よろしくお願いします。 Rubyの.soについて Rubyの.soについて 拡張子が.soファイルがあるのですが、これはなんなのでしょうか。 また、Rubyのファイルは基本テキスト形式ですが、C++のプログラムで扱う場合、配布する際には、バイナリ形式にすると思うのですが、それはどうすればいいのでしょうか。(間違ってたらすいません) さらに、Ruby関係でおすすめの本がありましたら、教えて頂けると幸いです。ちなみにC++はある程度できます。 長文失礼しました。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など