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
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)
您目前正在对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之类的字符:½.