在C#中计算校验和

Lia*_*ell 0 c# math calculus

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];
}
Run Code Online (Sandbox Code Playgroud)

当我输入7时,该函数返回101.但是7*2 = 14并且quersumme应该执行1 + 4 = 5

Gra*_*ICA 8

t[0]是字符'1',t[1]是字符'4',它被翻译成49 + 52,因此是101.检查一个ASCII图表,看看我在说什么.

您可以尝试使用Char.GetNumericValue()函数:

return (int)Char.GetNumericValue(n[0]) + (int)Char.GetNumericValue(n[1]);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

您目前正在对Unicode代码点求和 - "1"为49,"4"为52,因此为101.您希望获取每个字符的数字值.

如果您知道数字将在'0' - '9'范围内,那么最简单的方法就是减去'0'并使用LINQ Sum方法对每个值求和:

public int SumDigits(string n)
{
   return n.Sum(c => c - '0');
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用Char.GetNumericValue(),但这会返回,double因为它还可以应对诸如U + 00BD之类的字符:½.