c#中数字的位数和

本文关键字:数字 | 更新日期: 2023-09-27 18:03:17

我试图写一个代码,总和数字的数字,它应该工作,但我找不到我在哪里做错了,我有一个工作代码在Python为此,我试图做同样的方式在c#但是…以下是两个代码

Python:

number = "12346546"
summ=0
for i in number:
    summ+=int(i)
print summ
c#:

string num = "2342";
int sum = 0;
for (int i = 0; i < num.Length; i++)
{
    int number = Convert.ToInt32(num[i]);
    sum += number;
}
Console.WriteLine(sum);

编辑:我使用了调试器,我发现当我转换数字时,它们变成了完全不同的数字,但如果我转换整个字符串,那么它是正确转换…如何解决这个问题?

c#中数字的位数和

num[i]是一个char, Convert.ToInt32将返回字符的ASCII码而不是实际的数值。用途:

int number = Convert.ToInt32(num[i].ToString());

i < num.Length-1改为i < num.Length

编辑:为了更清楚,这里有一个例子:

int n1 = Convert.ToInt32('0'); // Uses Convert.ToInt32(char) result -> 48
int n2 = (int) '0'; // cast from char to int result -> 48
int n3 = Convert.ToInt32("0"); // Uses Convert.ToInt32(string) result -> 0

代替Convert.ToInt32(num[i])

Convert.ToInt32(num[i].ToString())

else,你将得到一个ASCII值…(因为num[i]char)

查看msdn

c#字符串的末尾没有null,因此您不必担心它,因此不需要在循环中使用"-1"。但是,有一种更简单的方法:

string num = "2342";
int sum = num.ToCharArray().Select(i => int.Parse(i.ToString())).Sum();

将字符串转换为字符数组,将它们全部转换为int型(在此过程中返回一个IEnumerable<int>),然后返回它们的总和。

Convert.ToInt32(num[i]);将给出字符数字的ASCII值。例如,对于字符1,您将得到49

使用char.GetNumericValue:

for (int i = 0; i < num.Length; i++)
{
    int number = (int) char.GetNumericValue((num[i]));
    sum += number;
}

你还需要修改你的循环继续到长度,因为你正在使用<

如果你想使用LINQ,那么你可以这样做:

int sum = num.Select(r => (int)char.GetNumericValue(r)).Sum();

使用Linq:

一行解决方案
string num = "2342";
int sum = num.Sum(c=> Convert.ToInt32(c.ToString()));

这里有一个小提琴:https://dotnetfiddle.net/3jt7G6

你可以把一些东西结合起来。

您可以使用Linq (Sum()是Linq方法)从string中选择char的集合。

您仍然需要将这些字符转换为数字;您可以通过将字符转换为字符串并对其进行解析来完成此操作,也可以使用另一个内置方法。

var sum = num.Sum(i => Char.GetNumericValue(i));

char本质上只是一个数字。它只是一个代表字符的数字。

以下是一些突出这一点的解决方案:

int sum = num.Sum(c => c) - '0' * num.Length;
// or
int sum = 0;    
for (int i = 0; i < num.Length; i++)
{
    sum += num[i] - '0';
}