夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

SRM148 Div.2 Easy DivisorDigits

今日学校のパソコンでTopCoderできるか試してみました…



サーバーの関係でArenaからログインできませんでしたorz

問題文に注意

今回はこんな感じ

PROBLEM STATEMENT
Create a class DivisorDigits containing a method howMany 
which takes an int number and returns how many digits in 
number divide evenly into number itself.

DEFINITION
Class:DivisorDigits
Method:howMany
Parameters:int
Returns:int
Method signature:int howMany(int number)


NOTES
  • No number is divisible by 0.
CONSTRAINTS
  • number will be between 10000 and 999999999.

え?簡単というか短いじゃん!

って思うかもしれませんが、僕は見事にひっかかりました。

こんなとこの問題なんだから、含まれてる数字の合計を割るんだと思ったら・・・

与えられた数字を数字に含まれる0~9の数字で割る問題だった。
立ちが悪いのは、引っかかった解釈でもサンプルの0と1は通ってしまうんですよね(笑)

さて、そんで正解のコード。

class DivisorDigits {
   public:
   int howMany(int number)
  {
  	stringstream ss;
  	ss << number;
	string num = ss.str();
	sort(num.begin(), num.end());
	int count=0;
	for (int i=0; i<num.length(); i++) {
		if (num[i]-48 != 0 && number % (num[i]-48) ==0)
		{
			// cout << num[i] << endl;
			count++;
		}
	}
	return count;
  }
};

string stream出てきましたね。

忘れてたんでまたググル羽目になってしまいましたが・・・
以上です。

p.s.
数学ガール読み終わりましたよ!めっちゃおもしろかったです。