题目:在不使用额外的内存空间的条件下判断一个整数是否是回文数字(int型整数)
思路:首先负数肯定都不是回文数字,所以我们需要考虑的只有0和正数。由于不能使用额外的内存空间,这里就需要放弃将数字转化为字符串或者使用数组这两种办法。这里我想到的办法是,根据输入的整数,我们将其拆分,分别将首位数字和末尾数字单独拆出来,进行比较是否相等,不相等则直接返回false(非回文);若相等,则去该数字的头尾,对剩下的部分重复这样的头尾比较操作,直到只剩下0位或者1位数。如:1331,我们先得到头部为1,尾部为1,比较相等,去掉头尾的两个1,剩下33;再对33取头尾,头部为3,尾部为3,去掉头尾之后循环结束,返回true(回文)。
那么在这里,我这个办法的关键就是如何得到一个整型数的头尾了。这就需要灵活地运用%和/这两个符号了,%是取余操作,/是除法操作。首先,我们需要知道一个整数的位数,我们用multiple来表示该整数的数量级(multiple为10的倍数),times来表示该整数的位数。随后,用x/multiple得到首位数字,用x%10得到末尾数字,进行比较。最后x = x % multiple; x = x / 10;剔除首尾,持续循环。如果在循环结束前有任何首尾不相等,则会返回false;否则返回true。
实现过程: