算法用途
判断输入字符串是否为回文数。
回文数
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。
使用语句
if-else
do-while
while
算法描述
概述:将字符串首位末位数字进行比较,若两数相同,则删去首位和末位并继续比较新数字的首末位直到中间数
步骤:
1.得到数字
2.算出位数
3.循环比较前后数
(1)判断现有数的位数
(2)利用pow使首位的位数扩大
(3)取首位
(4)%10取末位
(5)比较首末位
(6)判断循环次数是否达到输入位数的一半(奇数/2编译器不计小数)
4.输出结果
适用范围
-2147483648~2147483647(int型)
将变量修改为long int 即可
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,d,i=0,j,k=0;
puts("请输入一组数字:");
scanf("%d",&a);
j=a;//循环不影响a的值
while(j!=0)//取位数
{
j/=10;
k++;
}
do
{
i++;
c=0;
j=a;//循环不影响a的值
b=a%10;//后数
while(j!=0)//取位数
{
j/=10;
c++;
}
d=a/pow(10,c-i);//前位缩进
d%=10;//前数
a/=10;
}while(b==d&&i<k/2);//检查两边到中间是否相同
if(b!=d)//中间数判断
printf("不是回文数");
else
if(i==k/2)//i不够大说明中间有数字不相等
printf("是回文数");
else
printf("不是回文数");
return 0;
}
同类算法比较
!此算法相较于常见的“字符串倒置法”效率低了很多,仅为新算法尝试,使用时需要注意效率要求。
强壮性
输入若为字母则输出(不是回文数)