前提・実現したいこと
int main(void)をint main(int argc,char *argv[])に書き換えました
発生している問題・エラーメッセージ
エラーにはなりませんが、標準出力に正しく出力されません```
コマンドライン入力に20と入力した場合に
標準出力に83621143489848422977と出力されることを求めています。
該当のソースコード
C
1 2#include <stdio.h> 3#include <stdlib.h> 4 5int main(int argc, char *argv[]) 6{ 7 char *a, *b, *c; 8 int i, n, na, nb, nc, r; 9 10 if (argc != 2) { 11 printf("usage: %s number_of_digits\n", argv[0]); 12 return 1; 13 } 14 n = atoi(argv[1]); 15 if (n < 1) { 16 puts("number of digits should be greater than 1"); 17 return 1; 18 } 19 20 a = calloc(n + 1, sizeof(char)); 21 b = calloc(n + 1, sizeof(char)); 22 c = calloc(n + 1, sizeof(char)); 23 if ((a == NULL) || (b == NULL) || (c == NULL)) { 24 printf("cannot allocate memory.\n"); 25 exit(1); 26 } 27 28 a[0] = 0; 29 b[0] = 1; 30 na = nb = 1; 31 32 for (; nb <= n;) { 33 r = 0; 34 for (i = 0; i != nb; i++) { 35 r = a[i] + b[i] + r; 36 c[i] = r % 10; 37 r = r / 10; 38 } 39 if (r == 1) { 40 c[i] = 1; 41 nc = nb + 1; 42 } else { 43 nc = nb; 44 } 45 for (i = 0; i != nb; i++) a[i] = b[i]; 46 for (i = 0; i != nc; i++) b[i] = c[i]; 47 na = nb; 48 nb = nc; 49 } 50 51 for (i = na - 1; i >= 0; i--) printf("%d", a[i]); 52 printf("\n"); 53 54 free(a); 55 free(b); 56 free(c); 57 58 return 0; 59}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
「コマンドライン入力」に正の整数値nを入力すると、動的な配列を生成し、n桁以下のフィボナッチ数で最大のものを計算して画面上(標準出力)に表示するプログラムを作成したい
質問は編集できます。
「C言語```ここに言語を入力」ではなく「```C」と書いてください。
「コード」ではなく、#include <stdio.h> から } までのコードを書いてください。
「}```」ではなく、単独で「```」と書いてください。
回答2件
あなたの回答
tips
プレビュー