2013-03-19 321 views
0
numbers[i] = numbers[i] * 2; 

if (numbers[i] >= 10) 
{ 
    string t = numbers[i].ToString(); 
    Console.WriteLine(t[0] + " plus " + t[1]+" = "+quersumme(t).ToString()); 
    numbers[i] = Convert.ToInt32(t[0]) + Convert.ToInt32(t[1]); 
} 

public int quersumme(string n) 
{ 
    return n[0] + n[1]; 
} 

当我输入7.但7 * 2 = 14和quersumme应该做1 + 4 = 5计算校验

+0

什么问题o-O – 2013-03-19 16:24:01

+0

你究竟想要做什么? – Jodrell 2013-03-19 16:29:27

+0

你正在取char值,你应该改为char.GetNumericValue()。 – 2013-03-19 16:31:48

回答

8

t[0]是字符的函数返回101 '1',和t[1]是字符'4',它被翻译为49 + 52,因此101.查看ASCII chart查看我在说什么。

你可以尝试使用Char.GetNumericValue()功能:

return (int)Char.GetNumericValue(n[0]) + (int)Char.GetNumericValue(n[1]); 
+0

首先,ToString()似乎是错误的。 – Jodrell 2013-03-19 16:42:18

+0

我想到了ASCII,甚至看了看,但似乎我错过了表中的重要位。多谢,伙计! – 2013-03-19 16:46:18

0

尝试转换N [0]和n [1]分离INT32在您quersomme功能

+0

转换为int32将再次提供字符值! – Yahya 2013-03-19 16:27:45

0

你正在做字符串连接在quesumme方法。

应该是:

public int quersumme(string n) 
{ 
    return (int)Char.GetNumericValue(n[0]) + (int)Char.GetNumericValue(n[1]); 
} 
5

您目前正在总结Unicode码点 - “1”是49,和“4”是52,因此101你想利用每个数字值字符。

如果您知道该数字将在范围“0” - “9”,这样做的最简单的方法就是减去“0”,并使用LINQ Sum方法总结每个值:

public int SumDigits(string n) 
{ 
    return n.Sum(c => c - '0'); 
} 

或者你可以使用Char.GetNumericValue(),但返回double,因为它也有字符,如U + 00BD科佩斯:1/2。

+0

首先,ToString()似乎是错误的。 – Jodrell 2013-03-19 16:41:56

+0

@Jodrell:好吧。你绝对可以没有。另一方面,因为它是关于*数字*的,你可以争辩说它是关于数字的文本表示。 – 2013-03-19 16:42:45

0

它看起来像我想要枚举int中的数字。

试试这个以避免缓慢和繁琐的解析和转换。 (所有的亲戚,我没有测试性能。)

static IEnumerable<int> EnumerateDigits(int value, int baseValue = 10) 
{ 
    while (value > 0) 
    { 
     yield return value % baseValue; 
     value = value/baseValue 
    } 
} 

然后,如果你想要的顺序切换到一个数组

var t = EnumerateDigits(numbers[i]).Reverse().ToArray(); 

但是,如果你只是想总结数字。

var checksum = EnumerateDigits(numbers[i]).Sum()