標準入力から正整数 n( 0< n < 2000 )が与えられたとき、3冪数( 3k , k>0 )でその十進表現が n 桁を超える最小の値を左詰にして1行として書き出すプログラムを作りたいです。
実行例1
標準入力
1
標準出力
27
実行例2
標準入力
2
標準出力
243
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/13 13:14
2019/11/13 13:18
2019/11/13 13:29
回答2件
0
Ruby
1puts 3**((gets.to_i / Math.log10(3)).ceil)
このコードをCで実装すればいいだけです。ただし、Cには多倍長整数が存在しないので、自分で実装して下さい。面倒なので私はしません。n=1999の時は
plain
113742231976089993825924505225296099507118178057806905765769037401188248609301570217293818616817366753876269535435563950620537765220323513155072159327807727374305477544433870917530050955070287845237809114383807300123231941063472776862839379052911660113884020348832946476896466644463652985686828482927867942438599638160390594084509955815858309545964702674278466459334229350698527530132267404401827152057174555864160056028011235611450393424740945500065603017636066911645235515247849507338439426925421687093890213924874921565646034466454348094852160668996394066764552316307050220383741761262968143993900913932950332996899326475498287475078588914702718979736749446170280548909351731544826935881057352709755250507100634299835954616729209993596187205634289024897526845308492543804675984911399389377305445606432978822723842032045578764878789664626108259144233645656985332386702519497266494362685828287963220099426912231296599346470699856188090282767320888832607473484536035227066042108389494227098920413248232105079445849620269448366177253025936316566961634280809557589342894047698753444999069808682848349648975214912961280336098618191568933228148634532695934971234735955629209466399623573572273182262784989904552890244743314450209855074127833604173752222160561995717095516756699829976386368924605441701302606286682419131074197272867220176269436776950227146332328854744402177699424303238997210548980868828287251155470800017200006381979152510402950737349945941824654110166165492691641056723821537878572202143643336151302552724810458475519719790709612507237949549219097315571744169468343316227442627699802634030906839515266194766470107649519531149123424469519141148229480709415357015528489845461135236339820713258057680101684695247925333952305186007484641996133714294067063128901610991194573538236441516288844895568422681304701906661820999957951730860613845101804606690356172189118557144440532380141095812639403534476986685331266654305870075438957336071459201650510242542536911388739203808198752018248314539449
になります。
投稿2019/11/13 13:39
総合スコア21737
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
フィボナッチの問題と同様にやればできますね。
C
1#include <stdio.h> 2 3#define N 2000 4 5int main(void) 6{ 7 char a[N + 1] = { 1 }; 8 int k = 1, n, i, r; 9 if (scanf("%d", &n) != 1 || n < 1 || n >= N) return 1; 10 11 for (;;) { 12 for (r = i = 0; i < k; i++) { 13 r += a[i] * 3; a[i] = r % 10; r /= 10; 14 } 15 if (r) { 16 a[k] = r; 17 if (++k > n) break; 18 } 19 } 20 while (k > 0) putchar(a[--k] + '0'); 21 putchar('\n'); 22}
理解できましたか?
分からないところは質問してください。
投稿2019/11/14 07:52
総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/14 12:59
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。