質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

389閲覧

C言語 桁

assa

総合スコア35

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/11/30 06:33

編集2020/11/30 12:13

これは multiplyとconvertを使って100の階乗を作ろうとしています。
convertは整数を配列に格納する関数です。multiplyは2つの配列の積の値を新しい配列に入れる関数です。
どのように組み合わせることで100!をつくることができるでしょうか。
アドバイスかヒントをぜひください。。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/11/30 06:35

うまく行かないとはどうなるんでしょうか。 具体的な結果を提示して、どこがダメで、どうなればいいのかを提示しましょう
assa

2020/11/30 06:38

指摘ありがとうございます
guest

回答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

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

ただのミスでした。ありがとうございます

投稿2020/11/30 11:28

assa

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2020/11/30 12:55 編集

どういうミスですか? 解決したコードを貼り付けてください。 そうすれば、私の回答を示します。 また、質問のコードを削除していますが、元に戻してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問