标题
回文数
类别
数组
时间限制
2S
内存限制
1000Kb
问题描述
若一个非负整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。
判断输入的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no。
输入说明
输入为一个整数n,0<=n<1000000000。
输出说明
若该整数为回文数,则输出整数各位数字之和,否则输出no。
输入样例
样例1输入
131
样例2输入
24
输出样例
样例1输出
5
样例2输出
no
#include<stdio.h>
#include<math.h>
int main (){
int n,n1,n2,m=0,j,p,i,a=1,z=1,s=0,k,d,sum=0,k1,k2;//a是求首位,z是求末尾。
scanf("%d",&n);
n1=n;
n2=n;
p=1+log10(n); //p是求n有几位数。
i=p+1;
j=p-1;
if(p%2==0) //当位数是偶数时。
{
do{
k1=pow(10,j);
a=n1/k1;
n1=n1%k1;
j=j-1;
z=n2%10;
n2=n2/10;
if(a==z){s=s+1;}
else s=s;
}
while(j>=p/2);
if(p==2*s)
{ k=n;
do{d=pow(10,i);
sum=sum+n/d;
m=m+(n/d)*d;
n=k-m;
i=i-1;
}while(i>=0);
printf("%d\n",sum);
}else printf("no");
}if(p%2!=0) //当位数是奇数时。
{
do{
k1=pow(10,j);
a=n1/k1;
n1=n1%k1;
j=j-1;
z=n2%10;
n2=n2/10;
if(a==z){s=s+1;}
else s=s;
}
while(j>p/2);
if(p==2*s+1)
{ k=n;
do{d=pow(10,i);
sum=sum+n/d;
m=m+(n/d)*d;
n=k-m;
i=i-1;
}while(i>=0);
printf("%d\n",sum);
}else printf("no");}
return 0;
}
较为繁琐,但用的方法比较基础,容易理解。(其他知识我还没学。)