我正在尝试编写一个代码,它总结一个数字的数字并且它应该可以工作,但是我找不到我在做错的地方,我在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);
编辑:我使用调试器,我发现当我转换数字时,它们变成完全不同的数字,但如果我转换整个字符串然后它正确转换...如何解决这个问题?
答案 0 :(得分:4)
num[i]
是char
,Convert.ToInt32
将返回char的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
答案 1 :(得分:3)
替换Convert.ToInt32(num[i])
通过
Convert.ToInt32(num[i].ToString())
否则,您将获得ascii值...(因为num[i]
是char
)
请参阅msdn
答案 2 :(得分:2)
C#字符串末尾没有空值,因此您不必担心它,因此循环中不需要“-1”。但是,有一种更简单的方法:
string num = "2342";
int sum = num.ToCharArray().Select(i => int.Parse(i.ToString())).Sum();
这会将字符串转换为字符数组,将它们全部转换为整数(在过程中返回IEnumerable<int>
),然后返回它们的总和。
答案 3 :(得分:1)
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();
答案 4 :(得分:1)
使用Linq的单行解决方案:
string num = "2342";
int sum = num.Sum(c=> Convert.ToInt32(c.ToString()));
这是一个小提琴:https://dotnetfiddle.net/3jt7G6
答案 5 :(得分:0)
你可以结合一些事情。
您可以使用Linq(Sum() is a Linq method)从char
中选择string
的集合。
您仍然需要将这些字符转换为数字;您可以通过将字符转换为字符串并解析它,或者您可以使用其他内置方法来完成此操作。
var sum = num.Sum(i => Char.GetNumericValue(i));
答案 6 :(得分:0)
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';
}