• ベストアンサー

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

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

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8021/17145)
回答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

  • 0~9の数字を3桁で作ったら何個できるんでしょうか?

    0~9の数字を3桁で作ったら何個できるんでしょうか? タイトルどおりです。 110.111.112←こんな感じで作っていくと何個できるのでしょう…。 オバカな質問ですいません><

  • たくさんある数字の中から、どれを足せばその数字になるかわかる方法ってありますか?

    タイトルどおりなのですが、数字を自動検索するような方法ってありますか? 文章ではわかりにくいので、例を出しますと 13 8 2 の数字の中で、何個か数字を足して10という数字を作らなければいけない。 この場合、8と2を使うと10になります。 その8と2がわかるようなソフトとか、計算方法とか、エクセルの使い方とかわかりませんでしょうか? 数字の数が半端ではないので、いちいち手計算していると時間がかかってしまうのです。 よろしくお願いします。

  • 4ケタの数字パターン

    携帯電話の4ケタの暗証番号ってあるじゃないですか? 0~9の数字がある中で どの数字が暗証番号で使われていると分かったら何通りのパターンがあるんですかね? 例えば、太郎君の携帯の暗証番号は1と2と5と6を使っているとするじゃないですか? そしたら4×4×4×4=256通り全部試せば絶対に暗証番号突破できるという事ですか? でもこれは、必ず重複する数字がないという制約があるからですよね? 4つ全部違う数字だから1225みたいな重なる数字がないということです。 それが1と2と5だけを使っていて何かの数字を2個使っているという時も256通りなのですか? あと1と2だけを使っていて4ケタの暗証番号のパターンとかも256通りですか 回答お願いします。 ・・・・いや全部違う数字の制約があったら256通りもないのかな・・・よく分からなくなりました・・

  • 1から9までの数字を並び替えて3桁の数字の作り方

    1から9までの数字を並び替えて3桁の数字を作るときの 個数を求める問題でどうして下のように求めるのかを教えてください。 特に分からないのは一の位に1が出るのは56通りなのは分かるんですが それだと2も56通りですよね!?でも、下の場合だと掛けているので 112個になるんじゃないか・・・ということです。 {(1+2+…+9)*100*56+(1+2+…+9)*10*56+(1+2+…+9)*1*56} なぜそうなるのか教えてください。

  • 2つの数字を繰り返す4桁の数字

    たわいもない会話に出てきた4桁の数字が思い出せません。 条件 ・同じ並びの2つの数字を繰り返す4桁の数字 ・意味のありそうな日本語読みが2通りでき、相反する意味になる。  たしか、一つが否定的な読みで、もう一つがそれを打ち消すような読み方でした。  読みは擬態語だった気がする。 例えば「1717」 いーな、いーな(良い意味) ←→ いないいない(悪い意味) くだらなくてもなんでも 思い当たる4桁の数字がありましたらいくつでも教えてください。

  • 5個の数字1,2,3,4,5の中の異なる数字を一列

    5個の数字1,2,3,4,5の中の異なる数字を一列に並べて三桁の数字を作る。 7の倍数は全部で何通りできるか。 この問題がわかりません。おしえてください。

  • 半角数字かどうかの判定

    いつもお世話になっております。 VB6を使っているのですが、文字列が半角数字かどうかの 判定をしたいのですが、何かいい方法はないでしょうか? どうかよろしくお願いいたします。

  • IF式で 数字の 見分けかた

    IF式で 数字なら 正 違うなら 偽 としたいのですが 数字をどのように したら 判定するかが分かりません。 お教えいただけないでしょうか

  • 文字と数字の判定

    テキストボックスに入力された事柄が文字なのか数字なのか判定する関数ってないでしょうか? 無い場合どのようなロジックを組めばいいのでしょうか?

    • ベストアンサー
    • Perl
  • VBA 人の目には同じ数字に見えるのに、VBAは違う数字として判定してしまう

    あるセルに1826.97792という数字が入力されており、 別のセルにも1826.97792と同じ数字が入力されています。 人間の目で見る限りまったく同じ数字です。 また、エクセル関数=if(・・・・・)で判定しても同じ数字という判定がでます。 しかしながら、VBAにて if セル1=セル2 then などとして比較すると、同じでないという判定結果になります。 どうしてこういうことが起きるのでしょうか? また、プログラムを書くうえでの対処方法はどうすればいいのでしょうか? ちなみに、数字は他の人が作ったファイルのもので、 改めて、手で入力しなおすと正しく判定されます。