0
numbers[i] = numbers[i] * 2;

if (numbers[i] >= 10)
{
   string t = numbers[i].ToString();
   Console.WriteLine(t[0] + " plus " + t[1]+" = "+quersumme(t).ToString());
   numbers[i] = Convert.ToInt32(t[0]) + Convert.ToInt32(t[1]);
}

public int quersumme(string n)
{
   return n[0] + n[1];
}

7を入力すると、関数は101を返します。ただし、7 * 2 = 14であり、quersummeは1 + 4=5を実行する必要があります。

4

5 に答える 5

8

t[0]は文字「1」でありt[1]、文字「4」であり、49 + 52、つまり101に変換されます。ASCIIチャートをチェックして、私が話していることを確認してください。

Char.GetNumericValue()関数を使用してみることができます。

return (int)Char.GetNumericValue(n[0]) + (int)Char.GetNumericValue(n[1]);
于 2013-03-19T16:24:17.030 に答える
5

現在、Unicodeコードポイントを合計しています。「1」は49、「4」は52、つまり101です。各文字の桁の値を取得します。

数字が「0」から「9」の範囲になることがわかっている場合、これを行う最も簡単な方法は、「0」を減算し、LINQSumメソッドを使用して各値を合計することです。

public int SumDigits(string n)
{
   return n.Sum(c => c - '0');
}

または、を使用することもできますが、U + 00BD:½などの文字にも対応しているためChar.GetNumericValue()、戻ります。double

于 2013-03-19T16:25:14.817 に答える
0

n[0]とn[1]を変換して、quersomme関数でint32を分離してみてください

于 2013-03-19T16:24:29.573 に答える
0

quesummeメソッドで文字列の連結を行っています。

する必要があります:

public int quersumme(string n)
{
   return (int)Char.GetNumericValue(n[0]) + (int)Char.GetNumericValue(n[1]);
}
于 2013-03-19T16:25:09.490 に答える
0

の数字を列挙しようとしているように見えますint

遅くて面倒な解析と変換を避けるために、これを試してください。(これはすべて相対的なものであり、パフォーマンスはテストしていません。)

static IEnumerable<int> EnumerateDigits(int value, int baseValue = 10)
{
    while (value > 0)
    {
        yield return value % baseValue;
        value = value / baseValue
    }
}

次に、順序を配列に切り替えたい場合

var t = EnumerateDigits(numbers[i]).Reverse().ToArray();

ただし、数字を合計したいだけの場合。

var checksum = EnumerateDigits(numbers[i]).Sum()
于 2013-03-19T16:40:12.453 に答える