一、题目 二、解题思路 例如判断123321是不是回文数,让123321每次余除以10,余数为各位上的值,放到一个数组中,再存数值的过程中,我们可以取得这个数字一共有多少位,作为我们的遍历次数进行铺垫,我定两个指针变量分别从头和尾进行遍历,遍历次数需分情况进行判断: (1)如果位数长度len为奇数,遍历次数为(len-1)/2,举例12321,头尾遍历1=1,2=2,遍历两次即可,遍历次数:(5-1 )/2 (2)如果位数长度len为偶数,遍历次数为len / 2,举例123321,头尾遍历1=1,2=2,3=3遍历两次即可,遍历次数:6/2
头尾遍历时,两值不相等说明此数不是回文数,反之亦然。
有一些特殊情况: (1)例如负数:-131,反过来131-,可以排除。 (2)零是回文数,反过来也是零。 (3)除零外,末尾为零的数都不是回文数,例如:120,反过来是21。
以下方便大家理解: 123321 / 10 = 12332 … 1 12332 / 10 = 1233 … 2 1233 / 10 = 123 … 3 123 / 10 = 12 … 3 12 / 10 = 1 … 2 1 / 10 = 0 … 1
三、虚机测试代码
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
void main()
{
bool isPalindrome(int x);
int num = 123321;
if(isPalindrome(num))
{
printf("%d yes!!!\n",num);
}
else
{
printf("%d no!!!\n",num);
}
}
bool isPalindrome(int x)
{
void PrintfArr(int *arr);
if(x < 0)
{
return false;
}
else if(x == 0)
{
return true;
}
else if(x % 10 == 0)
{
return false;
}
int remainder = 0;
int num = 10;
int *arr = malloc(sizeof(int) * num);
int i = 0;
for(i=0;i<num;i++)
{
arr[i] = 0;
}
i = 0;
while(x / 10 != 0)
{
remainder = x % 10;
x = x / 10;
arr[i] = remainder;
printf("x : %d, remainder : %d\n",x,remainder);
i++;
}
arr[i] = x;
PrintfArr(arr);
int q,y,arrsize;
if((i+1) % 2 == 0)
{
arrsize = (i+1) / 2;
}
else
{
arrsize = i / 2;
}
for(q=0,y=i;q<arrsize;q++,y--)
{
if(arr[q] != arr[y])
{
return false;
}
}
return true;
}
void PrintfArr(int *arr)
{
int i = 0;
while(arr[i] != 0)
{
printf("index: %3d, val : %3d\n",i,arr[i]);
i++;
}
printf("=============\n");
}
四、虚机测试截图 五、leecode提交代码
bool isPalindrome(int x)
{
if(x < 0)
{
return false;
}
else if(x == 0)
{
return true;
}
else if(x % 10 == 0)
{
return false;
}
int remainder = 0;
int num = 10;
int *arr = malloc(sizeof(int) * num);
int i = 0;
for(i=0;i<num;i++)
{
arr[i] = 0;
}
i = 0;
while(x / 10 != 0)
{
remainder = x % 10;
x = x / 10;
arr[i] = remainder;
i++;
}
arr[i] = x;
int q,y,arrsize;
if((i+1) % 2 == 0)
{
arrsize = (i+1) / 2;
}
else
{
arrsize = i / 2;
}
for(q=0,y=i;q<arrsize;q++,y--)
{
if(arr[q] != arr[y])
{
return false;
}
}
return true;
}
六、leecode提交截图
|