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.Wed Dedbugging我发现char []的3个元素是这样的:
[0] 51'3',[1] 56'8',[2] 50'2'
为什么呢? 51,56,50是什么意思?
答案 0 :(得分:9)
你假设'0'
的char值是0。它不是;事实上,'0'
的UTF16值为48。
因此,您要将字符'3'
,'8'
和'2'
的UTF16值加在一起,即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.
}
答案 1 :(得分:1)
分别是'3','8'和'2'的Unicode值。
要将Unicode值(例如51)转换为Unicode值(例如3)所代表的字符的整数表示,请使用Convert.ToInt32(char)
方法。
答案 2 :(得分:0)
[EDITED] Char是unicode 16(GoogleAnalytics.make)。你可以使用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();
}
答案 3 :(得分:0)
这些数字是数字的字符代码。如果您只想将每个数字的值相加,可以从每个字符值中减去48以将其变为ist数值
for (int i = 0; i < nlst.Length; i++)
{
output += nlst[i] - 48;
}
答案 4 :(得分:0)
您的输出变量定义为整数。如果将一个char添加(+ =)一个整数,它的unicode值将被添加到输出变量中。
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 += Convert.ToInt32(nlst[i]);
}
Console.WriteLine(output);
Console.ReadLine();
}
答案 5 :(得分:0)
您需要将output += Convert.ToInt32(Char.GetNumericValue(nlst[i]));
转换回其数值。
试试这个:
WordCount.scala
答案 6 :(得分:0)
正确的解决方案是
output += Convert.ToInt32(nlst[i]) - '0';
或简要
output += nlst[i] - '0';
或作为替代
output += Convert.ToInt32(Convert.ToString(nlst[i]));
请注意:与C ++一样,C#Convert.ToInt32将字符转换为基本的Unicode(即旧的Ascii)。