我之前普遍用的判断一个数是否是回文数的方法就是:一个数组同时从头、从末尾开始遍历,一个一个地进行比较,假如出现一个不相等,就跳出循环等。代码如下:
#include <stdio.h>
int main(){
int n;
int sign=0; //定义变量记录数字n的位数;
scanf("%d",&n);
int a[100]={}; //设一个数组并初始化,把数n的每一位都存进去
for(int i=0;n!=0;i++){
a[i]=n%10;
sign++;
n/=10;
}
int flag=1; //定义一个标记变量,如果flag=0,则不是回文数
for(int i=0;i<sign/2;i++){ //从中间劈开来比较两边
if(a[i]!=a[sign-i-1]) {
flag=0;break;
}
}
if(flag==1)printf("YES");
else printf("NO");
return 0;
}
但是这样的方法显然比较繁琐,步骤也比较长;
在写这类题的时候我就像,如果能把数字数组强制转换为字符数组就好了,这样就能用到字符数组里的strcmp函数直接比较,很方便;
果不其然,我发现了一个可以把数字转化为字符数组的函数:
_itoa 函数 英文: integer to array
功能: 将Integer类型转换为base进制,存入字符串数组中
用法:char * _itoa(int value, char *str, int base);
意思,即先将value转化为base进制的数,之后再保存在str中。
注意:此函数在 #include <stdlib.h> 头文件中
给出个例子:
int num=12345;
char str[20]={};
_itoa(num,str,10); //10 表示把num 转化为10进制存入数组str
printf("num = %d,str = %s",num,str);
//输出结果为:num = 123456,str = 12346
于是回文数这道题可以这样写:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int n;
scanf("%d",&n)
char a[20]={};
_itoa(n,a,10); //将数字n按照10进制存入a中
char b[20]={};
int i,j=0;
for(i=strlen(a)-1;i>=0;i--){ //把a倒序存入b中
b[j]=a[i];
j++;
}
if(strcmp(a,b)==0)printf("Yes\n"); //比较字符数组a和b
else printf("No\n");
return 0;
}
似乎没有简单多少哈,不过至少思路更清晰了(吧)~