- ベストアンサー
算術演算子について
例えば、 100()3()27()23 とした時に、()に*/-+のどれか二つを入れて、 計算結果を出したい時、どうすればいいんでしょうか?ヒントを教えていただけないでしょうか?ちなみに、全て同じ演算子であってもいいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、解釈の確認ですけど >100()3()27()23 >とした時に、()に*/-+のどれか二つを入れて、計算結果を出したい時 これは「()を『*/-+』のいずれか2つに置き換えて計算結果を出す組み合わせ」 という解釈でよろしかったでしょうか?幾通りか解釈できそうですが、個人的には そう解釈したのでこれを前提に回答します。 #()があったまま「*/-+」を入れるのは文法エラーですから・・・。(^^; ()を置き換えるのに「/*」と「*/」と「//」は当然候補からはずれます。それから、 定数が前後に続いていますので「++」と「--」も使えません。これらの理由は初級者 でも説明ができるはずです。わからなければ調べてください。っていうか、わからな ければデバッグで大いに苦労します。余力があれば「回答に対する補足」で軽く 説明してみてくださいな。(^^; また、演算子の構成から「+/」と「-/」もない です。 んで前後定数であれば「+*」と「-*」と「**」も使えません。この3つ理由は・・・ もう少しC言語の勉強をすればわかりますよ。キーワードは「ポインタ」です。 ということは残った組み合わせで計算結果を得ることができます。 余談ですが別質問で締め切られたhttp://oshiete1.goo.ne.jp/kotaeru.php3?q=1917724 ですが、別回答があります。C言語ではマクロを用いた記述で意図した書き方ができます。 #Microsoft社製Visual Stadio 2003にてコンパイルおよび動作確認済み #include <stdio.h> #define MARKS + /* ここがchar i = '+';の代わりになる */ void func() { int j; j = 100 MARKS 3; printf("%d\n",j); return; } もしかしたら、これで「宿題」がかなり楽になったんじゃないかな?(^^;
その他の回答 (3)
- uyama33
- ベストアンサー率30% (137/450)
1.構文解析ルーチンと字句解析ルーチンをつくる。 2.演算子の入った文字列をつくる。 3.構文解析ルーチンに文字列をわたして計算させる。 1はコンパイラ作成の本に書いてあります。 構文解析ルーチンを作ってくれるソフトを コンパイラコンパイラとも言います。 エクセルで計算式を書いてやると 計算してくれる仕組みとおなじ ものを作るという考えです。
- Ancient_ENG
- ベストアンサー率61% (11/18)
こんにちは、AEと申します。 4種類のキャラクタを、3つのカッコ内に2個ずつ配置していく全パターンを調べるためには、6桁の4進数で全てのパターンを調べることができると思います。 昔、学生時代に、 「9876543210の各数字の間に(+)(-)()=無 しを入れ合計が100になるようなパターンが何種類 あるかを求めるプログラムをFortranで作成せよ。 ただし、そのパターンの文字列をプリントする ことも含め出来る限り短いステップ数で書く こと。(行の接続は認めない)」 という課題が出たときがあります。 このプログラムを作る時には3進数を基本としてプログラムを作成したと記憶しています。 ※11行くらいでできたと思います。 これを応用すれば出来ると思いますよ。 頭の体操として面白いですね。 頑張ってください。 PS: それにしても( )内に2個ずつって正しいですか? (*/)というパターンはどういう計算をすればいいんでしょう?
- oyaoya65
- ベストアンサー率48% (846/1728)
●数値の前には符号(+や-)が付け符号付き数値にできます。 ●符号付数値同士の間には演算子の(*/-+)のいずれでもかけます。 以上のことからそれぞれの()の中に 「*-」、「*+」、「/-」、「/+」、「--」、「-+」、「+-」、「++」のいずれかを入れればいいかと思います。 2番目の記号は算術演算子というより符号と言った方が適当かも知れませんね。 なお、一部の計算機の算術式の記述法に「**」がべき乗を表す場合があります。つまり 「xのy乗」を「x**y」と書く場合です。 例) 100 - -3 + -27* +23 = -518 式の意味は 100 -(-3) + (-27)*(+23) と同じですね。