• ベストアンサー

8桁の数字の中にある一桁の数字があるかないか判定する式は?

タイトル通りです。 たとえば 12345678(1234万5678)という数字があるとしてこの数字の中に5があるかないか判定するというものです。

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8626/18446)
回答No.1

アルゴリズムとしては... A.i=1とする B.i番目の数字が5であるかどうか判定する C.もしYESならおしまい(成功) D.もしNOならiに1を足す E.iが8を超えていたらおしまい(失敗) F.Bに戻る こんな感じです。

その他の回答 (5)

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.6

こんな感じ? input n do if (n mod 10) = 5 then success n = n \ 10 if n = 0 then failure loop

回答No.5

#3です。 では、手順どおりに進めてみましょう。 A.与えられた8桁の数字をMとする  =>Mは12345678 B.Mの、10で割ったときの剰余をとる =>剰余は8 C.もし剰余が求める数字(5)ならおしまい(成功) D.もし剰余が求める数字(5)でなければ、Mを10で割り、 =>M÷10は1234567.8  小数点以下を切り捨てた値を新たなMとする =>Mは1234567 E.Mが0ならおしまい(失敗) F.Bに戻る B.Mの、10で割ったときの剰余をとる =>剰余は7 C.もし剰余が求める数字(5)ならおしまい(成功) D.もし剰余が求める数字(5)でなければ、Mを10で割り、 =>M÷10は123456.7  小数点以下を切り捨てた値を新たなMとする =>Mは123456 E.Mが0ならおしまい(失敗) F.Bに戻る B.Mの、10で割ったときの剰余をとる =>剰余は6 C.もし剰余が求める数字(5)ならおしまい(成功) D.もし剰余が求める数字(5)でなければ、Mを10で割り、 =>M÷10は12345.6  小数点以下を切り捨てた値を新たなMとする =>Mは12345 E.Mが0ならおしまい(失敗) F.Bに戻る B.Mの、10で割ったときの剰余をとる =>剰余は5 C.もし剰余が求める数字(5)ならおしまい(成功)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

数学的に記述するなら、 Π{i=1~8}([(p-[p/10^i]*10^i)/10^(i-1)]-5)=0 なら5を含みます。 Πは総乗記号 [ ]はガウス記号

回答No.3

私なら1の位をとってきますね。一番上の桁とか、i桁目とかを取りたくないから、ですが。 A.与えられた8桁の数字をMとする B.Mの、10で割ったときの剰余をとる C.もし剰余が求める数字(5)ならおしまい(成功) D.もし剰余が求める数字(5)でなければ、Mを10で割り、小数点以下を切り捨てた値を新たなMとする E.Mが0ならおしまい(失敗) F.Bに戻る こんな感じです。 普通、剰余は%演算子とかMod関数とかで取りますが、以下の計算でも取れます。[]はガウス記号の代用です。 M - ( [ (M/10) ] * 10)

keiman890
質問者

お礼

回答ありがとうございます。 だいたいの内容はわかったんですが僕の頭では少々ついていけない部分があります。すいません。 申し訳ないんですが、 12345678で例示してもらいたいんですけどいいですか?? すいません…。

  • naniwacchi
  • ベストアンサー率47% (942/1970)
回答No.2

一気に全ケタを考えることはできないのですが、次のようなのはどうでしょうか? ※長い回答になってしまいました。すみません。 (1)8ケタの数を 10000000= 10^7 で割ります。 (2)(1)の結果をガウス記号に代入します。 すると、上1ケタの数が現れます。これを M(1)とします。 M(1)= [N/10^7](Nは8ケタの数) (3)(2)の数と探している数:xの差をとります。これを f(1)とでもします。 f(1)= M(1)- x (4)上2ケタ目を求めるために、次の計算をします。 M(2)= [{N- M(1)*10^7}/10^6]= [N/10^6- M(1)*10] N/10^6は 12.345678のように 10の位をもつ数となります。 そこから上1ケタを消し(M(1)*10を引く) ガウス記号に入れることで上2ケタ目の数が現れます。 (5)探している数との差を f(2)とします。 f(2)= M(2)- x 以下、これを繰り返していきます。 f(1)~f(8)が結果として残りますが、これらを掛け合わせます。 一つでも xと等しいものがあれば、答えは0になります。 積の結果が0でなければ、等しいものはなかったことになります。 桁ごとの数をばらばらにとることができれば、 最後の「探している数との差を各々とって積を出す」だけで判別はできます。 積を使って条件の有無を調べるような方法は、コンピュータプログラミングでよく使われる方法です。

関連するQ&A