如何理解此功能以接受数字作为输入并将其取反?

时间:2018-09-09 17:01:31

标签: c#

如何更好地理解此代码?此功能的目的是让用户输入数字,然后程序将数字反过来返回。

我只是想知道它是如何工作的,在反向功能中究竟是什么在做反向?我尝试进行数学运算,但一直遇到障碍。

class Program
{
    static void Main(string[] args)
    {
        int n = 0, result = 0;

        Console.WriteLine("Please Enter a Number: ");
        n = Convert.ToInt32(Console.ReadLine());

        result = reverse(n);
        Console.WriteLine("The Reverse Number Is : " + result);
        Console.ReadKey();        
    }

    public static int reverse(int n)
    {
        int temp = 0, rev = 0;

        while( n != 0)
        {
            temp = n % 10;
            rev = (rev * 10) + temp;
            n = n / 10;
        }

        return rev;
    }
}

2 个答案:

答案 0 :(得分:1)

因此,反向函数中发生的事情如下:

此行将n除以10,然后取余数,有效取数字的最后一位。

temp = n % 10;


此行将反向数字1的所有数字向左移动,并在其右边添加temp数字。

rev = (rev * 10) + temp;


此行从原始数字中删除最后一位数字。与while循环结合使用,这意味着循环将继续进行,直到从n中删除所有数字为止。

n = n / 10;


也许通过示例更清晰:

让我们从n = 12345开始。我们用temp = n % 10;取最后一位数字,即5。接下来我们通过rev = (rev * 10) + temp;rev从0开始。0* 10 = 0,+ 5 =5。所以现在rev = 5。我们用nn = n / 10;中删除最后一位数字。所以现在n = 1234rev = 5

在下一次迭代中,我们以n的最后一位数字为4。rev当前为5。5 * 10 = 50,+ 4 =54。除去最后一位后的数字{{ 1}}和n = 123

在下一次迭代中,我们以rev = 54的最后一位为3。n当前为54。54* 10 = 540,+ 3 =543。除去最后一位{{ 1}}和rev

在下一次迭代中,我们取n = 12的最后一位数字2。rev = 543当前为543。543* 10 = 5430,+ 2 =5432。除去最后一位数字{{ 1}}和n

在下一次迭代中,我们以rev的最后一位(也是唯一一位)为1。n = 1当前为5432。5432 * 10 = 54320,+ 1 = 54321。数字rev = 5432n

rev现在为假,因此没有下一个迭代。该函数以n = 0rev = 54321结尾,并返回while( n != 0)的值54321,与12345相反。

答案 1 :(得分:0)

代码n % 10返回n/10的残差。因此,在第一次迭代中,您会从右边获得第一个数字并将其置于 temp 。然后使用n=n/10省略第一个数字,并准备再次使用n % 10获取第二个数字。要在第一位数字的右侧添加第二位数字,我们可以使用rev = (rev * 10)将第一位数字向左推,并使用{{1}在 rev 右边添加第二位数字}等。

我认为这个问题与stackoverflow无关,但是stackoverflows要求成员帮助新的贡献者更好地探索这里。如有其他疑问,请阅读https://stackoverflow.com/help/how-to-ask