2013-03-19 320 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()