色んなパターンがあるが、最速はテーブルを使った方法、最も遅いのは文字列化。
こちらはテーブル使った方法
using System; class Sample { static readonly int[] digits = {0, 9, 99, 999, 9999, 99999, 999999, /*9999999, 99999999, ... */}; static void Main() { foreach (var num in new[] {0, 1, 9, 10, 11, 99, 100, 500, 999, 1000, 6789, 10000, 99999}) { var digit = 1; for (;;digit++) { if (num <= digits[digit]) break; } Console.WriteLine("{0} => {1}", num, digit); } } }
ネタ元