繁体   English   中英

显示用户输入的数字中的数字总和

[英]Display the sum of digits in a number entered by the user

我需要从用户那里得到一个数字,并显示该数字的总和。 例如,数字12329中的数字1232917

这是我尝试做的,而是给了我ASCII码:

Console.WriteLine("please enter a number: ");
string num = Console.ReadLine();
int len = num.Length;
int[] nums = new int[len];
int sum = 0;
int count = 0;
while (count < len)
{
    nums[count] = Convert.ToInt32(num[count]);
    count++;
}
for (int i = 0; i < len; i++)
    sum += nums[i];

Console.WriteLine(sum);

这是一个非常常见的错误。 char实际上只是一个数字-char表示的char的编码值。 当您对它执行Convert.ToInt32时,它会将char视为一个数字,并说:“好吧,我们将这个数字转换为32位并返回!” 而不是尝试解析字符。

“等等,我在代码中的哪里使用了char ?” 你可能会问。 好吧,在这里:

Convert.ToInt32(num[count]) // 'num[count]' evaluates to 'char'

要解决此问题,您需要将char转换为string

nums[count] = Convert.ToInt32(num[count].ToString());
                              ^^^^^^^^^^^^^^^^^^^^^

现在,您正在调用ToInt32方法的另一个重载,该方法实际上尝试解析该字符串。

当您使用索引(在您的情况下为num[count] )访问字符串时,将获得一个char类型,因此将获得ASCII值。 您可以在情况下使用.ToString()将char转换为字符串nums[count] = Convert.ToInt32(num[count].ToString()); 我在这里发布了另一种解决您问题的方法:

string number = Console.ReadLine();
int sum = 0;
foreach (var item in number)
{
    sum += Convert.ToInt32(item.ToString());
}
Console.WriteLine(sum);

正如您所注意到的, Convert.ToInt32(num[count])将仅返回要转换的char的Unicode代码,因为当您在string上使用[]运算符时,您将获得对[the]个单个字符的只读访问权限字符串 [1]

因此,您正在使用Convert.ToInt32(Char) ,其中

将指定的Unicode字符的值转换为等效的32位带符号整数。

将数字值从char转换为数字的一种方法是使用Char.GetNumericValue() ,该方法

将指定的数字Unicode字符转换为双精度浮点数。


通过using System.Linq; 您可以将代码缩减为几行代码。

Console.WriteLine("please enter a number: ");
string num = Console.ReadLine(); // "12329"

int sum = (int)num.Select(n => Char.GetNumericValue(n)).Sum();

Console.WriteLine(sum); // 17 

这行代码是什么?

num.Select(n => Char.GetNumericValue(n))将遍历字符串中的每个char,就像您的while ,并将每个值转换为double值并返回IEnumerable<double> Sum()本身将迭代IEnumerable<double>每个值,并将总和计算为double 并且由于要使用整数作为结果,因此(int)double精度转换为整数值。


边注:

如果确实是整数,则可以检查您的输入。 例如:

int intValue;
if(Int32.TryParse(num, out intValue))
{
     // run the linq
}
else
{
     // re-prompt, exit, ...
}

如果您在一个字母上使用Char.GetNumericValue() ,它将返回-1 ,例如, string num = "123a29";的总和string num = "123a29"; 16

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM