标题 回文数 类别 数组 时间限制 2S 内存限制 1000Kb 问题描述 若一个非负整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。 判断输入的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no。 输入说明 输入为一个整数n,0<=n<1000000000。 输出说明 若该整数为回文数,则输出整数各位数字之和,否则输出no。 输入样例 样例1输入 131 样例2输入 24 输出样例 样例1输出 5 样例2输出 no
解答:首先观察回文数,它是一个关于中间对称的数字,如果对各个数位上的数字进行分解,正向输出和反向输出的数字是一样的。我们可以考虑先把各个位置上的数字给分出来,然后再进行重新组合,最后和原数进行比较。
#include <stdio.h>
int main() {
int n, num = 0, sum = 0, i, c ;
scanf("%d", &n);
c = n;
while (n != 0) {
i = n % 10;
sum = sum * 10 + i;
num += i;
n /= 10;
}
if (sum == c)
printf("%d", num);
else
printf("no");
}
还会有另外的想法,比如先把各个数位上的数字保存在数组中,然后从第一个与最后一个,第二个与导数第二个数等进行对比,如果全部数字可以对应,则输出各个数位上数字之和。或者还可以把这个数组中的数字反向排序,最后再有循环与原数组对比,也可以得到结果。