Java--回文数--头尾指针

问题:输入一个数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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值