如何更好地理解此代码?此功能的目的是让用户输入数字,然后程序将数字反过来返回。
我只是想知道它是如何工作的,在反向功能中究竟是什么在做反向?我尝试进行数学运算,但一直遇到障碍。
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;
}
}
答案 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
。我们用n
从n = n / 10;
中删除最后一位数字。所以现在n = 1234
和rev = 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 = 5432
和n
。
rev
现在为假,因此没有下一个迭代。该函数以n = 0
和rev = 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。