- 締切済み
短め!!C言語プログラミング作成求む!
以下の数式をプログラミングする方法を模索し続けております。 C言語で答えを教えてくださる方、先輩方ぜひご教授ください。 プログラミングの文自体は短いものではないかと踏んでいますが 素人のためなかなかうまくいきません。 (平文の文字コード)=MOD(POW(暗号の文字コード,95),323) 上式が暗号文作成のルールになっていて、一文字ごとに変換しようとしたのですが平文の分量が膨大で心が折れかけています。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
http://okwave.jp/qa/q8487643.html すでに 回答ありますが、どこが不満なのでしょうか? 膨大とありますが、きちんと繰り返し命令を使えば、コンピュータはひたすら繰り返してくれます。 あなたが心を折れる余地などありません。 たしかに、#2には問題が大きく2箇所あります。 一つは、Cの配列宣言の問題で、これは作者のミスです。 もう一つは、文字コードの範囲です。 通常文字コードとして使われるのは0~127のいわゆる半角英数の領域、あるいは、8bitを使った0~255の範囲です。 ですが、提示された式では、0~322の値になります。つまり「文字」にならない可能性があるのです。 これは、どうするべきかが、提示された条件だけでは判断できません。
- neKo_deux
- ベストアンサー率44% (5541/12319)
文字コードに何を想定しているのか不明瞭です。 323のMOD取ってるから計算結果は0~322になりますが、そういう文字コードは無いと思いますし。 仮にASCIIコードだとして、 ASCII文字コード : IT用語辞典 http://e-words.jp/p/r-ascii.html 暗号の文字コードが大文字の「C」だったとして、CのASCIIコードの10進数67を95乗すると、100桁をゆうに超えますから桁落ちします。 > プログラミングの文自体は短いものではないかと踏んでいますが 桁落ち気にしないのなら、例えば、 #include <stdio.h> #include <math.h> int main(int argc, char** argv) { int i; for(i=0; i<len(argv[1]; i++) putc(mod(power((double)argv[1][i], 95.0),323)); return 0; } とかですが、前述したように計算途中で桁落ちが発生してまともに動作しません。 桁落ち考慮したプログラム書こうとすると、途端に面倒になると思います。