C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 回文数の判定


(過去ログ 121 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■72241 / inTopicNo.1)  回文数の判定
  
□投稿者/ nobb (27回)-(2014/05/27(Tue) 18:18:01)

分類:[C#] 

開発環境:Windows 7、Visual Studio 2013、.NET Framework 4.5、コンソールアプリケーション

回文数の判定を行いたいと考え、以下の様なメソッドを書きました。
このメソッドで判定はうまく出来ていますが、もっときれいに書けるのでしょうか?
後学の為の質問ですので、それでいいんじゃない?という事もあるかと思いますが、よろしくお願いします。

#回文数:前からも後ろからも同じ並びになる数値
#例:12321,159951等

    static private bool IsKaibun(int num)
    {
      bool rslt = false;
      string strNum = num.ToString();

      for (int i = 0, j = strNum.Length -1; i < strNum.Length / 2; i++, j--)
      {
        if (i != j && strNum[i] == strNum[j])
        {
          rslt = true;
        }
        else
        {
          rslt = false;
          break;
        }
      }

      return rslt;
    }

引用返信 編集キー/
■72242 / inTopicNo.2)  Re[1]: 回文数の判定
□投稿者/ 魔界の仮面弁士 (28回)-(2014/05/27(Tue) 18:56:24)
No72241 (nobb さん) に返信
> #回文数:前からも後ろからも同じ並びになる数値
> #例:12321,159951等

自分なら、こうかな。


static bool IsKaibun(int num)
{
 string s = num.ToString();
 return s.Reverse().SequenceEqual(s);
}
引用返信 編集キー/
■72243 / inTopicNo.3)  Re[2]: 回文数の判定
□投稿者/ とっちゃん (221回)-(2014/05/27(Tue) 20:58:23)
とっちゃん さんの Web サイト
No72242 (魔界の仮面弁士 さん) に返信

面白そうなので参戦

文字列にしないアプローチ

static private bool IsKaibun( int num )
{
  if( num < 0 )
  {
    return false;
  }
  if( num < 10 )
  {
    return true;
  }
  int revNum = 0;
  int divNum = num;
  while( divNum != 0 )
  {
    revNum *= 10;
    revNum += divNum % 10;
    divNum /= 10;
  }
  return revNum == num;
}


引用返信 編集キー/
■72244 / inTopicNo.4)  Re[3]: 回文数の判定
□投稿者/ 渋木宏明 (11回)-(2014/05/27(Tue) 21:24:13)
渋木宏明 さんの Web サイト
2014/05/27(Tue) 21:48:35 編集(投稿者)
LINQ 解。

static void Main()
{
	var values = new[] { -12321, -123, -121, -12, -1, 0, 1, 12, 121, 123, 12321 };
	
	var query = values.Select(value => new { Value = value, IsPalindrome = IsPalindrome(value) });
	
	foreach(var item in query)
	{
		Console.WriteLine("{0}: {1}", item.Value, item.IsPalindrome);
	}
}

static bool IsPalindrome(int value)
{
	if (value < 0) value = -value;
	if (0 <= value && value < 10) return true;

	var array = ToSequence(value).ToArray();
	var length = array.Length;

	for(var i = 0; i < length / 2; i++)
	{
		if (array[i] != array[length - i - 1]) return false;
	}
	
	return true;
}

static IEnumerable<byte> ToSequence(int value)
{
	if (value < 0) throw new ArgumentOutOfRangeException("value");

	if (0 <= value && value < 10)
	{
		yield return (byte)value;
		yield break;
	}

	while (value > 0)
	{
		yield return (byte)(value % 10);
		value = value / 10;
	}
}

引用返信 編集キー/
■72250 / inTopicNo.5)  Re[4]: 回文数の判定
□投稿者/ nobb (28回)-(2014/05/28(Wed) 09:17:48)
皆様ご回答ありがとうございます。

もっとシンプル(きれい)に書ける方法、
文字列を使わない方法、
LINQによって得る方法、
それぞれ、私が気になっていた事が全て出尽くしたようなので、解決とさせていただきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -