前情提要
在写educoder的小练习,
本关任务:从键盘上输入一个正整数,判断其是否是回文数。若是回文数,输出该数,若不是回文数,输出0。所谓回文数是指顺序读与反序读都是一样的数,如121,25852。
相关知识
为了完成本关任务,你需要掌握:1.如何获取数字拆分,2.如何遍如何存储数据,3、如何判断回文数。
编程要求
根据提示,在右侧编辑器补充代码。
测试说明
平台会对你编写的代码进行测试:
测试输入:121
预期输出:
121
开始你的任务吧,祝你成功!
代码
#include <stdio.h>
int main ()
{
char a[100001];
int i = 0;
int sym = 0;
//先读入整形 再转换成字符变量
int num;
int t;
int j;
scanf("%d",&num);
while(num>0){
t = num%10;
a[i] = t;
num/=10;
i++;
}
i--;
for(int n=0; n<i/2 + 1; n++){
//从数字第一个数与最后一个数向中间比较
int m = i - n;
//printf("%c %c\n",a[n],a[m]);
if(n<m) //比较结束条件是 n>=m
{
if(a[n]!=a[m]){ //读取到两数不等 记录 跳出循环
sym = 1;
break;
}
}
}
if(sym == 0)
{
for( int j=0; j<=i; j++)
printf("%d",a[j]);
}
else printf("0");
return 0;
}
我的思路是读入整型数据将其拆分放入数组,然后两边开始比较是否相等.
int数据放入char数组
呃
char a[1];
int i = 1;
a[0] = 1;
是一种糟糕的做法 它存储的是ascii码所对应的字符;
也就是说,字符数组的输出部分也应该用%d占位符,来输出字符对应的ascii码
(我一开始以为存入会自动强制类型转换为char的123 实际上是强制类型转换为ascii对应的字符 )
至于为啥想用char,是一开始想逐个读入数字,用字符数组比较好处理,但是不会写连续读入的条件.
连续读入字符
用getch() 和 getche()函数能轻易实现