#C语言#算法小记(1)“缩进法”判断回文数

算法用途

判断输入字符串是否为回文数。
回文数
设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;
}

同类算法比较

!此算法相较于常见的“字符串倒置法”效率低了很多,仅为新算法尝试,使用时需要注意效率要求。

强壮性

输入若为字母则输出(不是回文数)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值