我的最终目标是取一个像29这样的数字,将它拉开,然后加上得到的两个整数。因此,如果数字为29,那么答案将是2 + 9 = 11.
当我调试时,我可以看到这些值被保留,但看起来其他值在这种情况下也是不正确的50,57。所以,我的答案是107.我不知道在哪里这些价值来自于,我不知道从哪里开始修复它。
我的代码是:
class Program
{
static void Main(string[] args)
{
int a = 29;
int answer = addTwoDigits(a);
Console.ReadLine();
}
public static int addTwoDigits(int n)
{
string number = n.ToString();
char[] a = number.ToCharArray();
int total = 0;
for (int i = 0; i < a.Length; i++)
{
total = total + a[i];
}
return total;
}
}
答案 0 :(得分:1)
您的代码实际上是添加了char的十进制值 看看https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
2和9的十进制值分别为50和57。在添加之前,您需要将char转换为int。
int val = (int)Char.GetNumericValue(a[i]);
答案 1 :(得分:0)
您的问题是您正在添加char
值。请记住,char是一个整数值,表示ASCII中的字符。当您将a[i]
添加到total
值时,您正在添加代表int
的{{1}}值,编译器会自动投射它。
问题在于此代码行:
char
上面的代码与此代码行相同:
total = total + a[i];
要解决您的问题,您必须通过以下方式更改该行:
total += (int)a[i];
// If a[i] = '2', the character value of the ASCII table is 50.
// Then, (int)a[i] = 50.
您可以看到此answer以了解如何转换数值 从
total = (int)Char.GetNumericValue(a[i]); // If a[i] = '2'. // Then, (int)Char.GetNumericValue(int)a[i] = 2.
到char
。在此page,您可以看到ASCII值表。
答案 2 :(得分:0)
只是为了好玩,我想我会看看我是否可以使用LINQ在一行中完成它,这里是:
public static int AddWithLinq(int n)
{
return n.ToString().Aggregate(0, (total, c) => total + int.Parse(c.ToString()));
}
我认为这不是特别“干净”的代码,但它最多可能是教育性的!
答案 3 :(得分:0)
试试这个:
public static int addTwoDigits(int n)
{
string number = n.ToString();
char[] a = number.ToCharArray();
int total = 0;
for (int i = 0; i < a.Length; i++)
{
total = total + (int)Char.GetNumericValue(a[i]);
}
return total;
}
将转换的数字转换为char始终返回ASCII代码。因此,您可以使用GetNumericValue()方法获取值而不是ASCII代码
答案 4 :(得分:0)
public static int addTwoDigits(int n)
{
string number = n.ToString()
char[] a = number.ToCharArray();
int total = 0;
for (int i = 0; i < a.Length; i++)
{
total += Convert.ToInt32(number[i].ToString());
}
return total;
}