【问题标题】:Adding int numbers?添加整数?
【发布时间】:2020-05-06 19:27:39
【问题描述】:
public static int addIntNumbers()
{
    int input = int.Parse(Console.ReadLine());
    int sum = 0;
    while (input !=0)
    {        
        sum += input % 10;
        input /= 10;
        Console.WriteLine(sum);
    }

    return sum;
}

我不明白这个语法:在while 条件之后,sum += input % 10,这基本上意味着sum = sum(which is 0) + input % 10,所以假设我输入了 24,所以我认为它的总和应该是 4?

然后是第二行,我什至不知道它在做什么。

有什么建议吗?

【问题讨论】:

  • 投反对票可能是因为缺乏研究工作,因为所有使用的运算符都在线记录。您还可以设置断点并单步执行代码以查看值是如何变化的。

标签: c# int


【解决方案1】:

最好的方法可能是添加 cmets。但是我已经可以看出,写这篇文章的人不知道他在做什么。对于初学者来说,没有 cmets,命名很糟糕,I/O 实际上是在函数内部处理的。

//The name is not right. This is not a proper sum function
//I think it is getting a sum of all digits in the input
public static int addIntNumbers()
{
    //Get a input from the user, parse it to int
    //That really belons outside. Just the int in per argument
    int input = int.Parse(Console.ReadLine());
    //Initialize sum to 0
    int sum = 0;

    //Input is also used as sort of "running variable".
    //The loop will break if input reaches 0
    while (input !=0)
    {
        //sum = sum + input % 10
        //It tries to divide input by 10, get's the rest, then adds that rest to sum
        sum += input % 10;
        //Divide input by 10. Note that all decimal parts will be dropped
        //That means it will reach 0 invariably
        input /= 10;
        //Output the current sum for debugging
        Console.WriteLine(sum);
    }
    //The function returns
    return sum;

}

【讨论】:

  • 这是我写的,很遗憾不是最好的程序员,对不起。关于我现在看到的代码,因为小数部分是我的问题,但我做的另一件事得不到的是这个。假设用户输入 24,所以第一行代码,在 while 条件之后,将计算 4,第二行代码将计算 2,所以 2 + 4 是 6,这是正确的答案,但是哪一行实际相加在 2 和 4 上?
  • @MatasMikelionis 第一个循环会将 4 加到 sum 中,然后第二个循环将加 2。所以在第二个循环中 sum += imput%10; 正在执行 4+2。
  • @MatasMikelionis 这就是为什么评论如此重要。在 6 个月内,您不再知道自己在想什么:D
【解决方案2】:

您的代码计算整数的逐位总和(如果输入为正,则总和为正,如果输入为负,则总和为负)。 如果您是 C# 初学者,这可能会对您有所帮助:

    while (input !=0)
    {

        sum = sum + (input % 10); //sum = sum + remainder of division by ten (separation of least significant digit)
        input = input / 10; //input is integer-divided by ten, which results in discarding of the least significant digit
        Console.WriteLine(sum);
    }

如果您不明白,请熟悉两者之间的区别 4/64.0/6。 第一个是整数除法,另一个是浮点除法。

【讨论】:

  • aaaa,我明白了,因为小数部分是困扰我的地方,但我有点不明白的另一件事是这个。假设用户输入 24,所以第一行代码,在 while 条件之后,将计算 4,第二行代码将计算 2,所以 2 + 4 是 6,这是正确的答案,但是哪一行实际相加2和4?
  • 输入 24 被处理为: 1) 计算输入 mod 10,即 4,并将其与 sum 相加(所以 sum 现在是 4) 2) 整数除以输入(现在是 24 ) 乘以 10 并将其存储回来,所以现在输入是 24/10 = 2(丢弃 4,因为它是整数除法)3)因为现在输入是 2,而循环进入下一次迭代:4)2 mod 10 是 2 ,与 sum 相加,因此 sum 为 6 5) 输入 2 / 10 为 0,存储到输入 6) 而循环不继续(因为 input = 0)并且 sum 为 6。 2+4=6 计算在 while 循环的第二次迭代中完成。
  • ooooh,我现在明白了,非常感谢您的帮助,祝您有美好的一天哈哈!
  • 哦,如果你碰巧看到最后一个问题,while 循环什么时候中断?当它实际计算 int 数的总和时?
  • input /= 10;在输入小于10的情况下执行时循环中断。如果输入
【解决方案3】:

一些事情可以帮助你理解这里发生了什么:

首先,假设您在 Visual Studio 中,您可以通过单击行号左侧的页边距在代码中设置断点。将出现一个红点,当您的代码达到该点时,它将暂停。暂停时,您可以查看“Locals”选项卡或将鼠标悬停在代码中的变量名称上,以查看该时间点的值。然后,您可以使用 F10 一次前进一行,看看情况如何变化。

其次,/= 运算符类似于 += 运算符,除了除法。因此,“x /= 10”与“x = x / 10”完全相同。

这个程序将你输入的数字的每个数字相加,方法是获取个位,将其相加,然后将数字除以 10 以消除旧的个位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-06-28
    相关资源
    最近更新 更多