提示:文章食用前置条件:C++基本语法,略微的数学知识 即可
前言
今天在刷力扣第九题(回文数)的时候,我的实现思路是将那个数字进行逆置,然后对逆置的数字与原本的数字进行比较,来判断回文数,因为回文数不是负数,所以这里只考虑正整数的逆置
代码如下:
#includeusing namespace std; int inversion(int x) { int fin = 0; //此处fin是final的意思,随便定义的 while(x) { fin = fin * 10 + x % 10; x /= 10; } return fin; }
可能有人表示这样的代码难以看懂,那么接下来就以手绘图的形式来进行讲解
比如这里输入的数字x为:12345,上图的流程图应该学过数学的都知道,这里得出的5,4,3,2,1就是对12345 % 10进行取模,然后问题来了,怎么把得出来的数字进行合并在一起呢?
while(x)
{
fin = fin * 10 + x % 10;
x /= 10;
}
且留意看这里的代码,fin是定义的一个变量,是final的意思,这里每次循环一次就把得到的模加上去并且下一次循环对fin乘以10再进行下一次相加,我们来模拟一次循环:
第一次循环:fin = 0*10 + 5 = 5
第二次循环:fin = 5*10 + 4 = 54
第三次循环:fin = 54*10 + 3 = 543
第四次循环:fin = 543*10 + 2 = 5432
第五次循环:fin = 5432*10 + 1 = 54321
然后在第五次循环结束后x = 0为false,结束了循环,至此完成了对数字的逆置,inversion(逆置)的函数功能就此完成了。
改进之处:上力扣提交代码的时候我也遇到问题了,因为一些比较大的数字会超出int的数据范围,因此如果是数据量过大的话,因使用long long来防止数据过大导致问题
代码如下:
#include为啥x不用long long呢?因为力扣官方给出的数据就是int x,当然各位在实际使用中可以根据实际情况改成long long(可能蓝桥杯之类的会用到吧) 最后希望这个案例能够帮助到大家去实现一些功能,本博主也是刚刚高中毕业啊,第一次写文章,做的不好的可以指出批评改正,然后上大学了有时间也会分享一些自己的心得,大家一起进步吧!!!using namespace std; long long inversion(int x) { long fin = 0; while(x) { fin = fin * 10 + x % 10; x /= 10; } return fin; }



