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