题目
回文数指的是一个数字,从左到右读和从右到左读都一样。例如,1221和1234321 是回文数,1234 不是回文数。现有n 个正整数ai(i=0,1,2,3,…,n−1),请找出其中最大的回文数。
注:对于30%的数据,1≤n≤100,1≤ai≤108。
对于60%的数据,1≤n≤1000,1≤ai≤1016。
对于100%的数据,1≤n≤104,1≤ai≤1032。
输入
输入文件的第一行只有一个正整数n,代表正整数ai 的个数。
接下来的n 行,每行包含一个正整数ai。输入保证一定有回文数。
输出
输出文件一行,一个正整数,即最大的回文数。
输入样例
3
4718
1221
121
输出样例
1221
说明
这个题数据范围到1e32,非常大,所以用字符串数组
代码如下:
#include<bits/stdc++.h>
using namespace std;
char s[100];//全局变量
int f(char ch[50])//定义一个函数判断是不是回文数;是返回1,不是返回0
{
int t,i;
t=strlen(ch);
for(i=0;i<=t/2;i++){
if(ch[i]!=ch[t-i-1]){
return 0;
}
}
return 1;
}
int main(){
int n,max=0,t,i;
cin>>n;
char s2[100];
while(n){
scanf("%s",s);//对于大数据的输入用scanf;不用cin。
if(f(s)){
t=strlen(s);
if(t>max){
strcpy(s2,s);max=t;//将满族条件的回文数放到s2中
}
else if(t==max){ //如果两个回文数长度相等,再逐一比较。
for(i=0;i<t;i++){
if(s[i]==s2[i]) continue;
if(s[i]<s2[i]) break;
if(s[i]>s2[i]) {
strcpy(s2,s);break;//strcpy函数有一个要注意的地方:复制后会覆盖原来的内容
}
}
}
}
n--;
}
puts(s2);
return 0;
}