一般情况下,都是先将数字分解成个位,十位,百位,千位等等,比方说一个n位正整数,再比较第一位与第n是否相等,第二位与第n-1位是否相等,以此类推。
在这里,我用了一个化n位数字为一个个单独的字符,然后直接比较相应的字符是否相等。直接应用函数itoa()来实现这个功能。
一. 函数itoa()简介:
itoa()为c语言的一个函数。itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言。它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通过header ,因为它是一个从逻辑对应到标准库的函数。itoa 取整数输入值,并将其转换为相应进制数字的字符串。
函数itoa()所在头文件是:
#include "stdlib.h"
函数itoa()格式:
char itoa (int value, char string, int radix)
value: 欲转换的数据(数字);
string: 目标字符串的地址;
radix: 转换后的进制数,如10进制、16进制等等。
函数itoa()功能:
把一个整数转换为字符串,例如输入正整数123456789,那么经过函数itoa(123456789, c, 10)后输出如下:
‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’
函数itoa()在VS中编译通过不了,解决方案是使用函数_itoa_s()来代替函数itoa()。
二. 在回文数判断中的应用
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
void main()
{
int i,a,cp,palindromeNumber(int x);
do
{
printf("200~3000之间的回文数有:\n");
for (i=200;i<3001;i++)
{
a = palindromeNumber(i); //a为回文数标识,当a=1时为回文数;当a=0时不是回文数
if (a==1)
printf("%d\n",i);
}
printf("请选择是否继续\n");
printf("1 = 继续\n");
printf("其他 = 退出!\n");
scanf_s("%d",&cp);
}while(cp==1);
}
//判断数x是否为回文数
int palindromeNumber(int x)
{
char c[20];
int len,i,cp;
cp = 1;
_itoa_s(x,c,10); //将正数x转换成10进制的字符数组c
len = strlen(c);
for (i=0;i<len/2+1;i++)
{
if (c[i]!=c[len-1-i])
cp = 0;
}
return(cp);
}