2014-05-14 71 views
-2

我想写一个代码,总结一个数字的数字,它应该工作,但我找不到我做错了,我有一个工作代码在Python为此,我试图做到这一点同样在C#中,但..这里有两个代码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

错字在你的for循环:试试 “I

+4

-1 - 你没甚至没有描述你的问题。如果您遇到错误,请将其粘贴到问题中。如果你得到意外的输出*粘贴*你得到的输出*和*写出预期的输出。 – Bakuriu

+0

Bakuriu感谢指出,但我实际上在我的帖子结尾“编辑:”,但显然它并不是真的有必要,因为在几秒钟内几个用户告诉我,我的错误之前,我设法编辑我的文章。 – Darkbound

回答

4

num[i]charConvert.ToInt32将r E打开字符,而不是实际的数值value.Use的ASCII码:

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

也改变i < num.Length-1i < 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 
+0

是的,谢谢我注意到,只要我使用你的转换方法,它现在工作! :) 感谢关于ASCII解释,我期待的原因是类似的东西。 – Darkbound

+0

只是一个澄清的问题:num [i] .ToString()接受第i个元素并将其自身转换为字符串,使其完全独立于原始字符串,这就是为什么现在它的转换正确吗? – Darkbound

+0

@Darkbound是的,当您将其转换为字符串时,您正在使用[this](http://msdn.microsoft.com/en-us/library/sf1aw27b(v = vs.110).aspx)Convert的重载。 ToInt32,这就是为什么它给出了预期的结果 –

3

更换Convert.ToInt32(num[i])

通过

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

否则,你会得到一个ASCII值...(导致num[i]char

看到msdn

+0

@TimS。确实;) –

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(); 
2

有在C#字符串末尾没有空,所以你不必担心它,因此不需要循环中的“-1”。然而,还有一个更简单的方法:

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

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

+0

*在C#字符串的末尾是* no * null。 –

+0

'-1'很可能是一个逻辑错误。 – gunr2171

+0

@TimS。澄清。感谢您的反馈! – BradleyDotNET

1

一个使用LINQ一个在线解决方案:

string num = "2342"; 
int sum = num.Sum(c=> Convert.ToInt32(c.ToString())); 

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

+0

我不明白这是如何总结的数字 – BradleyDotNET

+0

@BradleyDotNET我很乐意澄清你没有看到的。看看小提琴 –

+0

我现在看到它,不知道有一个这样的函数。感谢小提琴,我也可以链接String.Sum文档。 – BradleyDotNET

0

您可以结合一些事情。

您可以使用Linq(Sum() is a Linq method)从string中选择一个char的集合。

你仍然需要将这些字符转换为数字;您可以通过将字符转换为字符串并解析该字符或者使用其他内置方法来执行此操作。

var sum = num.Sum(i => Char.GetNumericValue(i)); 
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'; 
}