static void Main(string[] args)
{
int num = 382;
int output = 0;
char[] nlst = num.ToString().ToCharArray();
for (int i = 0; i < nlst.Length; i++)
{
output += nlst[i];
}
Console.WriteLine(output);
Console.ReadLine();
}输出结果是157,实际上应该是13。通过调试,我发现了char[] nlst的以下三个元素:
51'3',156'8',250'2‘
为什么?51,56,50是什么意思?
发布于 2016-07-28 09:14:51
假设'0'的char值为0。它不是,它实际上是UTF16值的'0'是48。
因此,您要将字符UTF16值'3'、'8'和'2',即51、56和50相加。
请注意,如果您的目标是将整数的所有数字加在一起,最好的方法是避免完全转换为字符串,如下所示:
int num = 382;
// Compute the sum of digits of num
int total = 0;
while (num > 0)
{
total += num%10;
num /= 10;
}
Console.WriteLine(total);然而,如果您只想知道如何使您的版本工作,只需减去'0'从每个字符之前,添加代码在一起。这将将'0'转换为0,将'1'转换为1,等等:
for (int i = 0; i < nlst.Length; i++)
{
output += nlst[i] - '0'; // Subtract '0' here.
}发布于 2016-07-28 09:14:55
它们分别是'3‘、'8’和'2‘的Unicode值。
转换Unicode值(例如。51)表示由Unicode值表示的字符的整数表示(例如。3)使用Convert.ToInt32(char)方法。
发布于 2016-07-28 09:15:18
编辑的Char是unicode 16 (https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx)。您可以使用int.Parse
static void Main(string[] args)
{
int num = 382;
int output = 0;
char[] nlst = num.ToString().ToCharArray();
for (int i = 0; i < nlst.Length; i++)
{
output += int.Parse(nlst[i].ToString());
}
Console.WriteLine(output);
Console.ReadLine();
}https://stackoverflow.com/questions/38631909
复制相似问题