前提・実現したいこと
たびたび失礼いたします。
標準入力からn ( 1 < n < 5000 )を読み込み、n桁以上のフィボナッチ数の中でもっとも小さいものを書き出すプログラムを作っています。
しかし、出力結果はn桁未満で最大のものが表示されてしまいます。
n桁以上で最も小さいフィボナッチ数を表示するにはどうすればいいのでしょうか?
ご教授お願い致します。
実行結果
【正しい結果】 標準入力:2 標準出力:13 標準入力:50 標準出力:15156039800290547036315704478931467953361427680642 【現在の出力結果】 標準入力:2 標準出力:8 標準入力:50 標準出力:9366947731425726508977331996039353971111632790877
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, char *argv[]) { 5 int D= 10; 6 int n, i, r, am, bm, cm; 7 8 scanf("%d", &n); 9 char *a= calloc(n,sizeof(char)); 10 char *b= calloc(n,sizeof(char)); 11 char *c= calloc(n,sizeof(char)); 12 13 for(i= 0; i!=n; i++) 14 a[i]= b[i]= c[i]= 0; 15 a[0]= 0; b[0]= 1; 16 for(am= bm= 1; bm<n;) { 17 for(r= i= 0; i!=bm; i++) { 18 r=a[i]+b[i]+r; 19 c[i]= r%D; r= r/D; 20 } 21 for(cm= bm; r!=0; cm++) { 22 c[cm]= r%D; r= r/D; 23 } 24 for(i= 0; i!=bm; i++) a[i]= b[i]; 25 for(i= 0; i!=cm; i++) b[i]= c[i]; 26 am= bm; bm= cm; 27 } 28 for(i= am; i!=0; i--) 29 printf("%d",a[i-1]); 30 printf("\n"); 31 return 0; 32 33}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 23:54