问题:输入一个数x,判断这个数是否是回文数
思想:
1、统计x的位数,并在此基础上把x划分为--奇位数数和偶位数数
2、在x的头尾定义两个变量作为其指针
如:x=3883 或 x=16861
↑ ↑ ↑ ↑
i j i j
通过for循环 i++,j-- 依次比对每个位数。
思考:
1)如何统计数的位数?--怎么知道它是几位数呢
2)如何取出各个位的数?--个十百千万...位怎么取出
3)对于偶位数和奇位数,for循环条件分别怎么写?
实现:
top:先过滤,若x为负数(x<0),则不为回文。并且,除0以外,若x%10==0(以零结尾),也不为回文。
1)个位数,如:7,7/1>0
十位数,如:32,32/10>0
百位数,如:624,624/100>0
……
用index来统计位数即可写成:
int index=0
if x/1>0 index++
if x/10>0 index++
……
写成for循环即为:
for(int i=0;i<=8;i++){
//这里8是最高允许统计的位数,即最大可输入八位整数,再大就不支持统计了。
if(x/10^(i)>0) {
//这里是伪代码,10^(i)代表10的i次方,具体怎么得到10的i次方的值,先自己想。
index++;
}else{
break;//这里break的原因是有可能第一两三次就统计好位数了,那就没必要再继续循环下去了。
}
}
2)
以4位长度举例
1221%10000/1000=1 千位
1221%1000/100=2 百位
1221%100/10=2 十位
1221%10/1=1 个位
可发现,若设x的长度为index,则:
最高位=x % 10^(index) / 10^(index- 1)(此处设指针j=index
↓每往下移1位 index-1 即j-1
↓ 1 2 5 2 1 → 1 2 5 2 1
↓ j → j
最高位-1=x % 10^(j-1) / 10^(j-1-1)
↓
……
直到i 、j交汇
1 2 5 2 1 → 1 2 5 2 1
i j → ij
此时i=j
……
↑
最低位+1=x % 10^(i+1) / 10^(i-1+1)
↑ 1 2 5 2 1 → 1 2 5 2 1
↑ i → i
↑每往上移一位 +1 即 i+1
最低位=x % 10^(1) / 10^(1-1)(此处设1=i