我将有一个数字作为使用输入或我存储分配给字符串的数字
string s"1234567";
对于此,每个字符串的索引将为0,1,2,3,4,依此类推
我想将该索引的数字添加为1 + 0,2 + 1,3 + 2等等
这样输出应该是1,3,5,就像那样
答案 0 :(得分:4)
IEnumerable<int> IndexDigitSum(string s)
{
for(int i=0;i<s.Length;i++)
{
int digit=s[i]-'0';
if(digit<0||digit>9)
throw new FormatException("Invalid Digit "+s[i]);
yield return (digit+i)%10;
}
}
在.net 2.0中,您可以通过添加到本地数组来替换yield return:
int[] IndexDigitSum(string s)
{
int[] result=new int[s.Length];
for(int i=0;i<s.Length;i++)
{
int digit=s[i]-'0';
if(digit<0||digit>9)
throw new FormatException("Invalid Digit "+s[i]);
result[i]=(digit+i)%10;
}
return result;
}
或者如果你想让它们合并:
string IndexDigitSum(string s)
{
string[] parts=new string[s.Length];
for(int i=0;i<s.Length;i++)
{
int digit=s[i]-'0';
if(digit<0||digit>9)
throw new FormatException("Invalid Digit "+s[i]);
parts[i]=((digit+i)%10).ToString();
}
return string.Join(",", parts);
}
要获得总和的最后一位数,可以简单地添加一个%10,因为数字的最后一位数是它的余数模10。
答案 1 :(得分:4)
string s = string.Join(",", valueString.Select(
(c, i) => (i + (int)(c-'0')) % 10));
或在2.0中:
string[] result = new string[valueString.Length];
for(int i = 0; i < result.Length ; i++) result[i] =
((i + (int)(valueString[i] - '0')) % 10).ToString();
string s = string.Join(",", result);