题目描述
回文数:所谓回文数就是具有如下性质的整数:一个整数,当它的各位数字逆序排列,形成的整数与原整数相同,这样的数称为回文数。例如:22,878,其各位数字交换位置后仍然是22,878因此称为回文数。编写函数int loop(int x),判断一个整数是否为回文数,如果x是回文数则返回1,否则返回0。编写程序loop.cpp。接受控制台输入的两个整数a,b。调用loop函数输出a到b之间的所有回文数。
输入用例:3 120
输出用例:
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111
解题思路:
思考该题,首先要求编写函数int loop(int x),判断x是否为回文数,有很多思路,第一种即判x的首位和末位是否相等,再判断次位和倒数第二位是否相等,依次进行...关键在于,x的位数是未知的,因此我们需要定义一个整形数组,把求出x的每一位的值,存到该数组,然后再进行判断操作。
第二种思路,就是元素逆置,直接把元素颠倒,再来判断是否相等。
第三种思路就是在第一种的基础上,直接用string类型转换,不再去定义数组。因为C++提供了下标操作符来进入字符串中的某一确定位置的字符,即直接访问字符串中的每一个字符。接下来我们看具体代码:
方法一:
#include <iostream>
using namespace std;
int loop(int x)
{
int a[100],n=0;//定义存取每一个位数的数组a和数组大小n
//用while循环获取x的每一个位数
while(x)
{
a[n]=x%10;
x/=10;
n++;
}
bool s=true; //定义bool型判断是否为回文数
int start=0,end=n-1; //定义数组的首元素和尾元素下标便于下一步判断
while(start<=end)
{
if(a[start]==a[end])
{
start++;
end--;
}
else
{
s=false;
break;
}
}
if(s) return 1;
else return 0;
}
int main()
{
int a,b; //定义起始位置和结束位置
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(loop(i)==1)
cout<<i<<endl;
}
return 0;
}
输出结果:
方法二:
#include <iostream>
using namespace std;
int loop(int x)
{
int a[100],b[100]; //定义两个数组,一个逆置前,一个逆置后
int n=0; //数组长度
while(x)
{
a[n]=x%10;
x/=10;
n++;
}
int j=n-1;
for(int i=0;i<n;i++) //for循环遍历数组b逆序
{
b[j]=a[i];
j--;
}
/*
while方法
int start=0,end=n-1;
int temp=0;
while(start<end)
{
temp=a[start];
a[start]=a[end];
a[end]=temp;
start++;
end--;
}
*/
bool s=true;
for(int i=0;i<n;i++)
{
if(a[i]!=b[i])
{
s=false;
break;
}
}
if(s) return 1;
else return 0;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(loop(i)==1)
cout<<i<<endl;
}
}
方法三:(用string方法转换,省去定义数组和求位数的步骤)
#include <iostream>
#include <string> //一定要加上此头文件
using namespace std;
int loop(int x)
{
int p=x;
string s=to_string(p); //int转string: to_string()
int start=0;
int end=s.length()-1;
bool isloop=true;
while(start<=end)
{
//如果第一项和最后一项相等,则继续遍历,判断第二个和倒数第二个数...以此类推。如果不相等,则转向else条件
if(s[start]==s[end])
{
start++;
end--;
}
//判断不相等,跳出循环
else {
isloop=false;
break;
}
}
if(isloop)return 1;
else return 0;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
if(loop(i)==1)
cout<<i<<endl;
}
}