创建一个C#程序,计算给定数字的各个数字之和
因此,为了练习,我决定尝试创建一个C#程序,计算给定数字的各个数字之和(例如,如果我输入数字123,那么总和应该是6,因为1+2+3..) 我的思考过程是,我将使用for循环迭代特定的数字(不过我必须先将数字转换为字符串),将每个数字添加到列表中,然后找到该列表的总和,以获得我的答案。但是,当我这样做时,如下代码所示:创建一个C#程序,计算给定数字的各个数字之和,c#,C#,因此,为了练习,我决定尝试创建一个C#程序,计算给定数字的各个数字之和(例如,如果我输入数字123,那么总和应该是6,因为1+2+3..) 我的思考过程是,我将使用for循环迭代特定的数字(不过我必须先将数字转换为字符串),将每个数字添加到列表中,然后找到该列表的总和,以获得我的答案。但是,当我这样做时,如下代码所示: static void Main(string[] args) { int num; int sumOfNum =
static void Main(string[] args)
{
int num;
int sumOfNum = 0;
List<int> numbersToAdd = new List<int>();
Console.WriteLine("insert number: ");
num = Convert.ToInt32(Console.ReadLine());
string myNum = num.ToString();
for (int i = 0; i < myNum.Length; i++)
{
numbersToAdd.Add(myNum[i]);
}
foreach (int n in numbersToAdd)
{
sumOfNum = numbersToAdd.Sum();
}
Console.WriteLine("the sum is " + sumOfNum);
}
我没有得到值1,2和3,而是得到49,50,51
为什么呢?是不是因为我发送的是字符串的索引,而不是实际的int?如果是这样,我如何修复它呢?
myNum
是一个字符串,这意味着myNum[I]
将返回一个字符,而不是int
。但是,在您的示例中,char
被隐式转换为int
,但您仍然可以获得字符的ASCII值
在您的例子中,这些字符恰好是'1'
、'2'
和'3'
,它们的ASCII值分别为49、50和51。要查看其他ASCII值,请在Internet上搜索“ASCII表”
要修复代码,必须通过减去'0'
-字符的值,将这些ASCII值转换回十进制值:
numbersToAdd.Add(myNum[i] - '0');
除此之外,您不必将数字转换为字符串,您可以使用模数10获得最右边的数字:num%10
,然后将num
除以10前进到下一个数字:num/=10代码>。只要num
与零不同,就在循环中执行此操作
while (num > 0)
{
sumOfNum += num % 10;
num /= 10;
}
将转换为ascii字符,其中数字为0x30到0x39,因此必须从每个数字中减去0x30:int input=123;int output=input.ToString()。选择(x=>(int)x-(int)“0”).Sum();DoingsumOfNum=numbersToAdd.Sum()代码>在循环中,不会有任何区别,因为它会一次又一次地返回相同的值。您提供的另一种方法非常出色,它背后的思想过程是什么?我不知道,我直觉地想到了。怪我使用各种协议和算法的历史;)啊,我想这就是当你在编码方面有很多经验时会发生的事情,哈哈。无论如何,谢谢你!
while (num > 0)
{
sumOfNum += num % 10;
num /= 10;
}