7

私は、整数で9の合計数を見つける必要がある次のメソッドを持っています。このメソッドは、9の数に基づいて従業員の契約タイプを取得するために使用されます。私は以下のクラスを試しました:-

public class EmployeeCreditCards
{
    public uint CardNumber(uint i)
    {
        byte[] toByte = BitConverter.GetBytes(i);

        uint number = 0;
        for (int n = 0; n < toByte.Length; n++)
        {
            if (toByte[i] == 9)
            {
                number = number + 1;
            }
        }
        return number;
    }
}

渡された整数に含まれる 9 の数を見つけようとしていますが、上記のメソッドは常にゼロを返します。何がうまくいかないのですか?

4

3 に答える 3

23

これは、小さなlinqで簡単に実行できます。

public int GetAmountOfNine(int i)
{
    return i.ToString().Count(c => c.Equals('9'));
}

using System.Linq;ただし、csファイルに追加してください。

バイトに変換しているため、答えは機能していません。数値をバイトに変換しても、 ( @ Servyを介して)各桁にバイトは生成されません。したがって、配列内のすべてのバイトをコンソール/デバッグに書き込む場合、番号は表示されません。

例:

int number = 1337;
byte[] bytes = BitConverter.GetBytes(number);

foreach (var b in bytes)
{
    Console.Write(b); 
}

コンソール:

57500

ただし、intを文字列に変換してから、文字列内のすべての文字が9であるかどうかを確認できます。

public int GetAmountOfNineWithOutLinq(int i)
{
    var iStr = i.ToString();
    var numberOfNines = 0;
    foreach(var c in iStr)
    {
        if(c == '9') numberOfNines++;
    }
    return numberOfNines;
}
于 2012-10-18T20:42:31.823 に答える
20

古典的な解決策は次のとおりです:(おそらくこれは解決策を見つけるための最速のアルゴリズムであり、 O(log n)時間しかかかりません。)

private int count9(int n)
{
     int ret = 0;
     if (n < 0)
        n = -n;
     while (n > 0)
     {
         if (n % 10 == 9) ++ret;
         n /= 10; // divide the number by 10 (delete the most right digit)
     }
     return ret;
}

それはどのように機能しますか? 例を考えてみましょう。n=9943

ここでret =0です。

n%10 = 3、これは!= 9

n = n / 10 = 994

n%10 = 4!= 9

n = 99

n%10 = 9、したがってret = 1

n = 9

n%10 = 9、したがってret = 2

n = 0

于 2012-10-18T20:44:19.840 に答える
2

試す

int numberOfNines = number.ToString().Where(c => c == '9').Count();

文字列はを実装するためIEnumerable<char>、最初に文字の列挙に変換せずに、LINQを文字列に直接適用できます。


アップデート

は数値の10進数を直接格納しないuintため、をバイト配列に変換しても期待どおりには機能しません。uint数値は、4バイトを超える2進数として格納されます。unit数値の小数点以下9桁であっても、Aには常に4バイトがあります。

10進表現を取得するために、数値を文字列に変換できます。

于 2012-10-18T20:43:48.873 に答える