OJ最大回文数(1e32)

题目

回文数指的是一个数字,从左到右读和从右到左读都一样。例如,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;
} 

 

猜你喜欢

转载自blog.csdn.net/qq_51281451/article/details/110498373