これは multiplyとconvertを使って100の階乗を作ろうとしています。
convertは整数を配列に格納する関数です。multiplyは2つの配列の積の値を新しい配列に入れる関数です。
どのように組み合わせることで100!をつくることができるでしょうか。
アドバイスかヒントをぜひください。。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
うまく行かないとはどうなるんでしょうか。
具体的な結果を提示して、どこがダメで、どうなればいいのかを提示しましょう
2020/11/30 06:38
指摘ありがとうございます
回答2件
0
解決したとなっているのに、そのコードが示されないと、
「階乗」で検索して、この質問にたどりついた人が困るでしょう。
私のコードを示します。
C
1#include <stdio.h> 2 3void output(int k, int *a) 4{ 5 while (--k >= 0) putchar(a[k] + '0'); 6 putchar('\n'); 7} 8 9int convert(int n, int *a) 10{ 11 int k = 0; 12 do a[k++] = n % 10; while (n /= 10); 13 return k; 14} 15 16int multiply(int n1, int n2, int *a1, int *a2, int *a3) 17{ 18 int k = n1 + n2 - 1; 19 for (int i = 0; i <= k; i++) a3[i] = 0; 20 for (int i = 0; i < n1; i++) { 21 int carry = 0; 22 for (int j = 0; j < n2; j++) { 23 a3[i + j] += a1[i] * a2[j] + carry; 24 carry = a3[i + j] / 10; 25 a3[i + j] %= 10; 26 } 27 a3[i + n2] = carry; 28 } 29 return a3[k] ? k+1 : k; 30} 31 32int main(void) 33{ 34 int n1 = 1, a1[180] = { 1 }, a2[180], a3[180]; 35 for (int i = 2; i <= 100; i++) { 36 int n2 = convert(i, a2); 37 n1 = multiply(n1, n2, a1, a2, a3); 38 for (int i = 0; i < n1; i++) a1[i] = a3[i]; 39 if (i <= 20) printf("%3d! = ", i), output(n1, a1); // for debug 40 } 41 printf("\n%3d! = ", 100), output(n1, a1); 42}
実行結果
text
1 2! = 2 2 3! = 6 3 4! = 24 4 5! = 120 5 6! = 720 6 7! = 5040 7 8! = 40320 8 9! = 362880 9 10! = 3628800 10 11! = 39916800 11 12! = 479001600 12 13! = 6227020800 13 14! = 87178291200 14 15! = 1307674368000 15 16! = 20922789888000 16 17! = 355687428096000 17 18! = 6402373705728000 18 19! = 121645100408832000 19 20! = 2432902008176640000 20 21100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
投稿2020/12/03 15:27
総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。