人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

力試しにナベアツのような判定をするプログラムを作ろうとしたところ、問題が発生しました。
3の倍数や5の倍数は考えるまでもないんですが、3のつく数字をどう判定したらいいのかわかりません。
どのように判定させればよいのでしょうか?

●質問者: nasum
●カテゴリ:コンピュータ 趣味・スポーツ
✍キーワード:ナベアツ プログラム 数字
○ 状態 :終了
└ 回答数 : 20/20件

▽最新の回答へ

1 ● ksh
●13ポイント

Ruby だと数値を to_s で文字列にできるので、そこで正規表現で 3 を含むかをチェックすればよいですね。

以下 ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32] で確認したコードです。

#!/bin/env ruby

for i in 1..40
printf( "%d ", i )
if i.to_s =~ /3/ || i % 3 == 0
printf( "aho" )
end
if i % 5 == 0
printf( "wan" )
end
printf( "\n" )
end

C だと

 sprintf (str, "%d", num);

で文字列化して

 if( NULL != strchr( str, '3')) {
 /* 3を含む */
 }

でしょうか。(手元にコンパイル環境がないので、こちらは試してません)

◎質問者からの返答

ソースコードつきの回答ありがとうございます。

Rubyには便利な機能がついてるんですね。

やはり文字列かしないと判定できないんでしょうか。

試してみます。


2 ● wanderinpenguin
●13ポイント

数字を何に格納するかによってくるでしょうが。

・3の倍数は、3で割ってあまりが0

・3の付く数は、1、10、100・・・と割っていって、あまり3になるかどうかの判断(割る数、この場合はforのループ数は、数値の型char,int,doubleなどによるでしょう、sizeof関数などと併用してもいいかもしれません)

で、よいと思います。

ほかにもやりかたはあると思いますが。

◎質問者からの返答

割り算であまりが3になればいいですね。

こういう数学的問題になると勉強をしっかりとやっておけばよかったと思います。

ありがとうございます。


3 ● BAZZ
●13ポイント

判定対象の整数を x とする。

n = 0 TO 15 の範囲で

int(x / 10**n)を計算し 10以上なら n = n+1 として繰り上げてゆく。

10 未満になったら、この値を y とする。( int : 少数点以下切捨ての意味)

値 y は、n+1 桁目の 数字になるので、これに対して 3の倍数の判定をする。

その後、対象の整数 x から y**n を引いて x とし、 n = n-1 にして再度

int(x / 10**n) を求めるてゆけば、n=0 になるまで全ての桁について判定が可能。

◎質問者からの返答

ありがとうございます。

少々難解ですけど、がんばりたいと思います。


4 ● gekikawa
●13ポイント

もう解答がでているでしょうが、数字自体を文字列として扱えばよいのでは?

PHPならば

if( ereg('.*3.*', $number){

3がつく数字

}else{

3はつかない数字

}

◎質問者からの返答

やはり文字列ですね。

理想としては数学的な回答がほしいところです。

ありがとうございました。


5 ● まねき
●13ポイント

正規表現をつかって処理をするのはどうでしょうか?

例:*3*

のような感じで

◎質問者からの返答

まだ正規表現というものがよくわかっていないのでこれを機会に勉強したいと思います。

ありがとうございました。


1-5件表示/20件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ