• ベストアンサー

階乗の式

「5」と入力すると、「1*2*3*4*5=120」(階乗)と表示されるプログラムを組みたいのですが、 例で言うと120という計算結果は出せるのですが式の部分が出せません。 forまたはwhileによって作るんですが誰か式をうまく出すプログラムが分かる人いらっしゃいませんか?

  • I-ryu
  • お礼率30% (22/73)
  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

import java.io.*; public class kaijyou { public static void main(String[] args){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数字を入力=> "); int x = Integer.parseInt(in.readLine()); int y=1; System.out.print("結果は "); for(int i=1;i<x;i++){ System.out.print(i+"*"); y=i*y; } System.out.print(x+"=" +y*x ); } }

I-ryu
質問者

お礼

今やってるタイプとおなじ形です! ありがとうございました。

その他の回答 (2)

回答No.2

セルA1に計算対象値を入力し、セルB1に計算結果を表示するものとすると、  エクセルの関数式の場合   セルB1に[=IF(A1>0,FACT(A1),"")]と記述する。  エクセルのマクロの場合   Dim A,B,C A=RANGE("A1").VALUE IF A>0 THEN B=1 FOR C=1 TO A B=B*C NEXT C END IF RANGE("B1")=B これでいかがでしょうか

  • luckymako
  • ベストアンサー率55% (29/52)
回答No.1

これでどうですか? public StringBuffer func(int a){ if(a > 0){ StringBuffer f = new StringBuffer("1"); long ans = 1; int tmp = 1; while(++tmp <= a){ f.append("*").append(tmp); ans *= tmp; } f.append("=").append(ans); return f; } return null; }

関連するQ&A

  • Nの階乗

    この問題がどうすればいいのかまったくわかりません。 考え方を教えて下さい。 ------------------------------------------------ まず、プログラムの中で一つの整数N(1<=N<=100)を入力させる。そして、一桁ずつを一つの整数配列の別々の箱に入れる表現を用いて、Nの階乗を計算し、その結果を表示するプログラムを作れ。例えば1258をdat[4]=1, dat[3]=2, dat[2]=5, dat[1]=8と表す。アルゴリズムには、ループ(for文、while文、repeat文のいずれか)を用いなさい。

  • C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに

    C言語の勉強をしていて、for文と戻り値を使った階乗について分からずに困っています。 以下の点に留意して、階乗を計算するプログラムを作成する。 階乗とは、数字を1つづつ減らしながら掛け合わせたものです。つまり 5の階乗:5×4×3×2×1=120 3の階乗:3×2×1=6 となります。 main内 1)整数型の変数kazu、kekkaを宣言する。 2)“階乗を計算します。”を表示する。 3)実行例と同様の表示になるように、“整数を入力してください”を表示し、入力された値を、変数kazuに読み込む。 4)作成する関数名は、kaijyoとし、kazuを引数とし、戻り値をkekka に代入する。 6)“○の階乗は ○です。”と表示する。 関数kaijyo内 1)引数を変数名xとする。 2)整数型の変数i、valを宣言する。 3)計算結果をvalに入れていくために、valを初期化する(下記注意参照)。 4)iをカウンターとするfor文と複合代入演算子を使って階乗を計算する。 5)valの内容が戻り値となるようにする。 注意:階乗を計算するために、for文の中で複合代入演算子を使って階乗を計算します。しかし、for文に入る前のvalの初期化には注意が必要です。0に何を何回かけても0だと言うことを思い出してください。 という問題です。 それで私は下の通りに作りました。 #include <stdio.h> int kaijyo(int x); void main(void) { int kazu,kekka,kaijyo,sum; printf("階乗を計算します。\n"); printf("整数を入力してください"); scanf("%d",&kazu); kekka=kaijyo(kazu); printf("%dの階乗は%dです。",kazu,kekka); } int kaijyo(int x) { int i,val; val=1; x=1; for(i=1;i<=val;i++){ x=x*i; } return val; } しかし、メイクして実行してもどの階乗でも256になってしまいます。 どこが間違っているのか分からずに困っています。 よかったら教えてください。 よろしくお願いします。 カテゴリを間違ってしまっていたらすみません。

  • 【至急】プログラミング

    「入力してもらった数の階乗or1からその数までの総和を計算、表示するプログラムを作れ」という課題が出されたのですが、考えても出来ませんでした。どなたか分かる方、教えてください。 使えるのはscanf、printf、for(or while)だけです。

  • パソコンで階乗を計算

    現在、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になる理由が分かりません。

  • 階乗の出力について

    Cを勉強中の者です。再起コールを使った階乗計算の結果を出力するプログラムをつくったのですが、もし再起コール(関数 kaijyo)を使わずにfor文などを使って同じように、階乗計算を行いたい場合どのようにすればいいでしょうか? 以下がそのソースコードです。説明が不足であればまた付け加えますのでよろしくおねがいします。 #include <stdio.h> int kaijyo(int a); int main(void) { int a; a = kaijyo(6); printf("6! = %d\n", a); return 0; } int kaijyo(int n) { if(n == 1) return 1; else return n*kaijyo(n-1); /*これを使わずに6!の結果を出したい/* }

  • 階乗

    現在JAVAでプログラミングの課題を行っています。階乗計算のプログラムを作成しているのですが、一定値以上の値はマイナスがついたり、数値が正しく計算されなかったりと少しおかしいところがあります。どうしてそうなるのか、またエラーが起きるときと起きないときは具体的に何が違うのかを教えていただきたいです。

    • ベストアンサー
    • Java
  • 階乗の計算

    問題の途中で以下のような式変形があったのですが、どうしても理解できません。   ( n / ( m + 1 ) ) * ( n - 1 / ( m + 2 ) ) * ・・・ * ( 1 / ( m + n ) ) = ( m ! * n ! ) / ( ( m + n ) ! ) なぜこのようになるのでしょうか?これは階乗計算にはよくある式変形なのでしょうか?また他にも階乗に関する重要な式変形があったら教えてください。よろしくお願いします。

  • 階乗のプログラム

    c言語初心者です。 13までの階乗の値を計算するプログラムを下のように書いたのですが、 #include <stdio.h> main() { int N, fact; fact=1; for(N=1; N<=13; ++N){ fact=fact*N; printf("%d!=%d\n",N, fact); } } このプログラムを実行してみると、12!までは正しい値が出力されるのですが、13!の値が1932053504と出力され、計算機の値と違います。 どこが間違っているのでしょうか。どなたかご教授お願いします。

  • 100の階乗のプログラムって

    100の階乗を配列を利用してプログラムを組みたいのですが、どうやってすればいいのか分かりません。やりたい方法としては、数値を入力して、1から順番に入力して数値までかけて行きたいです。その中で、繰り上がり(agari)を利用して、人間が筆算をしているのと同じやり方をして計算したいです。掛けられる数は2桁でも一気にかけます。よろしくお願いします。 #include<stdio.h> #define N 200 void main(void) { int a,agari,h,i,j; int su[N]; printf("数値を入力してください"); scanf("%d",&a); for(i=0;i<N;i++){ su[i] = 0; } su[N-1] = 1; agari = 0;   ここから先が分かりません。

  • プログラミング関係で

    プログラミングで次の問題をどうすればいいのかわかりません。 教えてください 1.配列に次のデータが格納されており、 2,-8,5,-4,6,5,7,-3,-9,-1 奇数、偶数、負の数がそれぞれいくつあるかを数え、表示するプログラムを作成してください。 2.任意の整数Xを入力し、Xの階乗の結果を表示するプログラムを作成しなさい。ただし、Xの階乗の計算は別関数で行い、入力と結果の表示はmain関数で行うようにすること。