回文数
类别
数组
时间限制
2S
内存限制
1000Kb
问题描述
若一个非负整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。
判断输入的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no。
输入说明
输入为一个整数n,0<=n<1000000000。
输出说明
若该整数为回文数,则输出整数各位数字之和,否则输出no。
输入样例
样例1输入
131
样例2输入
24
输出样例
样例1输出
5
样例2输出
no
代码实现
#include <stdio.h>
#include <math.h>
int add(int x) {
int pos = 0;
while (x != 0) {
pos += x % 10;
x = x / 10;
}
return pos;
}//计算各位数字加和
int judge(int x) {
//判断是否为回文数
int num = 0, a[1001], b[1001], k, flag = 1;
k = x;
//正向提取一次各位数字
while (x != 0) {
num++;
a[num] = x % 10;
x = x / 10;
}
//逆向提取一次各位数字
for (register int i = num; i >= 1; i--) {
b[i] = k % 10;
k = k / 10;
}
//进行比较
for (register int i = 1; i <= num; i++) {
if (a[i] != b[i]) {
flag = 0;
}
}
//写法上稍有问题,这里返回1代表的是不是回文数
if (flag == 0) {
return 1;
} else {
return 0;
}
}
int main() {
int n;
scanf("%d", &n);
if (n % 10 == n) //个位数直接输出(没有必要)
{
printf("%d", n);
return 0;
}
if (n <= 0) {
printf("no");
return 0;
}
if (judge(n) == 0) {
printf("%d", add(n));//是回文数
} else {
printf("no");
}
return 0;
}