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;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nap!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值