今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。
输入描述:
输入一个整数n(1 <= n <= 100000)
输出描述:
从1开始按从小到大的顺序输出所有回文数
题目解析:
1.首先输入n,一个循环从1-n进行输出。
2.当i处于1-10之间时,都是回文数,直接输出。
3.当i>=10时,由于不知道到底是几位数,所以用一个while循环来判断是几位数,例如1221的话,cnt就是1000,就表示是一个四位数,在下面while(a!=0)中,从千位到百位到十位到个位,cnt不断除以10.
4.最后就是一个while(a!=0)的一个循环,sum+=a%10*cnt则是相当于将i进行逆置,最后sum和i进行判断,如果相等,就输出。
代码如下:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
if(i<10){
cout<<i<<endl;
continue;
}
int a=i,cnt=1,sum=0;
while(a>=10){
a/=10;
cnt*=10;//判断是几位数。
}
a=i;
while(a!=0){
sum+=a%10*cnt;//相当于将i进行逆置比如1221;
//1.1*1000=1000;
a/=10; //2.1000+2*100=1200;3.1200+2*10=1220.4.1220+1=1221;。
cnt/=10;
}
if(sum==i)cout<<i<<endl;
}
return 0;
}